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 ...
随机推荐
- 第十篇 Form表单
Form表单 阅读目录(Content) Form介绍 普通的登录 使用form组件 Form那些事儿 常用字段演示 校验 使用Django Form流程 补充进阶 应用Bootstrap样式 批量添 ...
- JavaWeb学习记录
服务器端跳转(请求重定向): 1.jsp内跳转 : <jsp:forward page="page_scope_03.jsp"/> 客户端跳转(请求转发): 1.通过超 ...
- Apache使用mod_jk/mod_proxy模块实现代理、负载均衡的配置
转载自:https://blog.csdn.net/yuanyuan_186/article/details/51290518 192.168.1.123/192.168.1.121为后端tomcat ...
- 如何创建NPM包并上传
1 在NPM网站上注册,并验证(verify)自己的邮箱 https://www.npmjs.com 2 用命令行定位到你的库文件夹 3 在命令行里登录npm, 按提示依次输入用户名 密码 注册邮箱 ...
- java课程之团队开发冲刺阶段2.7
昨日总结: 1.完整实现课前闹钟提醒功能 遇到的困难: 1.没有遇到大的问题,细节地方没有处理好出现了一下小的情况 今天的任务: 1.实现对课程查询的完整实现 当日总结: 1.以前是使用二级联动下拉框 ...
- 快速幂(51Nod1046 A^B Mod C)
快速幂也是比较常用的,原理在下面用代码解释,我们先看题. 51Nod1046 A^B Mod C 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. In ...
- Linux文件和目录的属性及权限
Linux文件和目录的属性及权限讲解 文字解释: 第一列:inode索引节点 第二列:文件类型及权限 第三列:硬链接个数 第四列:文件或目录所属的用户(属主) 第五列:文件或目录所属的用户所归属的组( ...
- 标准库模块——json模块
将Python数据类型转换为其他代码格式叫做(序列化),而json就是在各个代码实现转换的中间件. 序列化要求: 1. 只能有int,str,bool,list,dict,tuple的类型支持序列化. ...
- Mybatis之配置文件
Mybatis_config.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE conf ...
- 报错:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
1.问题 写了一个简单的单层神经网络跑mnist手写数字集,结果每次fit都会出现dead kernel 很多dead kernel首先不要急着去网上搜dead kernel怎么解决,因为大家出现的原 ...