DataStructureAndAlgorithm--第 K 个最大值
设有一组 N 个数而要确定其中第 K 个最大者,我们称之为选择问题(selection problem)。
该问题的一种解法就是将这 N 个数读进一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,然后返回位置 K 上的元素。
稍微好一点的算法可以先把前 K 个元素读入数组并(以递减的顺序)对其排序。接着,将剩下的元素再逐个读入。当新元素被读到时,如果它小于数组中的第 K 个元素则忽略之,否则就将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组。当算法终止时,位于第 K 个位置上的元素作为答案返回。
package c1.kmax; import java.util.Arrays; /**
* 一组 N 个数确定其中第 K 个最大者
*
* @author MicroCat
*
*/
public class KMax { public static void main(String[] args) {
try {
int[] arr = { 12, 4, 6, 3, 4, 5, 0, -8 };
int[] arr2 = { 12, 4, 6, 3, 4, 5, 0, -8 };
int k = 5;
System.out.println("The " + k + " largest in arrays : " + kmax1(arr, k));
System.out.println("The " + k + " largest in arrays : " + kmax2(arr2, k));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 读入 K 个元素至新数组,以递减方式储存。 将剩下的元素再逐个读入。若小于新数组的最小值,跳过;否则,替换新数组最末位元素,重新排序。
* 最后返回新数组最末位元素。
*
* @param arr
* @param k
* @return
* @throws Exception
*/
public static int kmax2(int[] arr, int k) throws Exception {
try {
if (k <= 0 || k > arr.length) {
throw new Exception("k value out of range!");
}
int[] karr = new int[k];
System.arraycopy(arr, 0, karr, 0, k);
BubbleMaxToMin(karr);
for (int i = k; i < arr.length; i++) {
if (arr[i] <= karr[k - 1]) {
System.out.println("circle" + (i - k + 1) + " : " + Arrays.toString(karr));
continue;
} else {
karr[k - 1] = arr[i];
BubbleMaxToMin(karr);
System.out.println("circle" + (i - k + 1) + " : " + Arrays.toString(karr));
}
}
System.out.println(Arrays.toString(karr));
return karr[k - 1];
} catch (Exception e) {
// TODO: handle exception
throw e;
}
} /**
* 冒泡法由大到小排序
*
* @param karr
*/
private static void BubbleMaxToMin(int[] karr) {
for (int i = 0; i < karr.length; i++) {
for (int j = karr.length - 1; j > i; j--) {
if (karr[j] > karr[j - 1]) {
karr[j] = karr[j] ^ karr[j - 1];
karr[j - 1] = karr[j] ^ karr[j - 1];
karr[j] = karr[j] ^ karr[j - 1];
}
}
}
} /**
* 冒泡法排序直接返回第 K-1 元素
*
* @param arr
* @param k
* @return
* @throws Exception
*/
public static int kmax1(int[] arr, int k) throws Exception {
try {
if (k <= 0 || k > arr.length) {
throw new Exception("k value out of range!");
}
BubbleMaxToMin(arr);
System.out.println(Arrays.toString(arr));
return arr[k - 1];
} catch (Exception e) {
// TODO: handle exception
throw e;
} } }
DataStructureAndAlgorithm--第 K 个最大值的更多相关文章
- 在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max——猎八哥fly
在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max. 思路:将a中的数组两两相加,组成一个新的数组.并将新的数组和a数组进行sort排序.然后将a数组从大到小与新数组比较,如 ...
- 【JavaScript】Leetcode每日一题-矩形区域不超过K的最大值和
[JavaScript]Leetcode每日一题-矩形区域不超过K的最大值和 [题目描述] 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大 ...
- 原创:从海量数据中查找出前k个最小或最大值的算法(java)
现在有这么一道题目:要求从多个的数据中查找出前K个最小或最大值 分析:有多种方案可以实现.一.最容易想到的是先对数据快速排序,然后输出前k个数字. 二.先定义容量为k的数组,从源数据中取出前k个填 ...
- Bone Collector II HDU - 2639 01背包第k最大值
题意: 01背包,找出第k最优解 题解: 对于01背包最优解我们肯定都很熟悉 第k最优解的话也就是在dp方程上加一个维度来存它的第k最优解(dp[i][j]代表,体积为i能获得的第j最大价值) 对于每 ...
- [LeetCode] Max Sum of Rectangle No Larger Than K 最大矩阵和不超过K
Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...
- 寻找第K大的数
在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,解决这个问题的方法很多. 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找 ...
- 【leetcode】363. Max Sum of Rectangle No Larger Than K
题目描述: Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the ma ...
- 面试题 收集请求k千里马
收集请求k最大值 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来从事算法 ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
随机推荐
- Open_CV 色彩空间
色彩空间: 颜色空间按照基本结构可以分两大类:基色颜色空间 和 色.亮分离颜色空间.前者的典型是 RGB,还包括 CMY.CMYK.CIE XYZ 等:后者包括 YCC/YUV.Lab.以及一批“色相 ...
- PHP基础(9.27 第十三天)
什么是PHP,为什么要学习PHP: (1)php是嵌入html页面中的脚本语言 (2)目前最流行的网站开发语言 (3)在几乎所有平台中都可以运行 (4)很多企业都在使用PHP作为开发语言 P ...
- POJ - 1753 Flip Game (IDA*)
题意:4*4的棋盘摆满棋子,有黑有白,翻转一个棋子的同时也将翻转其上下左右的棋子(翻转后黑变白,白变黑),问使棋盘上所有棋子颜色相同,最少翻转的棋子数. 分析: 1.每个棋子至多翻转1次.翻转偶数次与 ...
- HDU 5475:An easy problem 这题也能用线段树做???
An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- App_显示图表内容
今天在之前记账本的基础上增加了图标的显示功能,在本次课程中它以折线图为例讲述.但是课程中给出了多有图的代码案例. https://github.com/lecho/hellocharts-androi ...
- 【LeetCode 】N皇后II
[问题]n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法.给定一个整数 n,返回 n 皇后不同的解决方案的数量. 示例: ...
- bzoj1415 NOI2005聪聪和可可
%%%http://hzwer.com/2819.html 先各种暴力搞出来p[x][y](从x到y下一个最近应该到达的位子) 然后就记忆化搜索??(雾) #include<bits/stdc+ ...
- 集合框架的详解,List(ArrayList,LinkedList,Vector),Set(HashSet,TreeSet)-(14)
集合详解: /* Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引. |--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢. ...
- SQL审核平台-Yearning安装部署实践
相关文档: https://guide.yearning.io/ yearning简介 http://python.yearning.io/install/ yearning安装 Yearning ...
- MyBatis:配置解析
配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configur ...