JAVA中寻找最大的K个数解法
JAVA 最大 个数 寻找 解法
2023-06-13 09:15:25 时间
这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数。排序选择快速排序是个比较好的选择。
好了,让我们来进行第一个解法:快速排序
代码如下
复制代码代码如下:
好了,让我们来进行第一个解法:快速排序
代码如下
publicstaticvoidquickSort(int[]arr,intstart,intend){
if(start<end){
intkey=arr[start];
intright=start;
intleft=end;
while(right<left){
while(right<left&&arr[left]>key){
left--;
}
if(right<left){
arr[right]=arr[left];
}
while(right<left&&arr[right]<=key){
right++;
}
if(right<left){
arr[left]=arr[right];
}
}
arr[right]=key;
quickSort(arr,start,right-1);
quickSort(arr,left+1,end);
}
}
快速排序之后,数组会是有序的,上面的排序是从小到大的,所以我们输出应该是下面这样
for(inti=arr.length-1;i>=arr.length-k;i--){
System.out.println(arr[i]+" ");
}
。第一个解法已经好了,但是有没有更好的办法。
答案是有的!我们可以选择部分排序,接下来我们使用选择排序来做解决这个问题。
代码如下:
if(arr==null||arr.length==0){
returnnull;
}
int[]newArr=newint[k];
List<Integer>list=newArrayList<Integer>();//记录每次最大数的下标
for(inti=0;i<k;i++){
intmaxValue=Integer.MIN_VALUE;//最大值
intmaxIndex=i;
for(intj=0;j<arr.length;j++){
if(arr[j]>maxValue&&!list.contains(j)){
maxValue=arr[j];
maxIndex=j;
}
}
if(!list.contains(maxIndex)){//如果不存在,就加入
list.add(maxIndex);
newArr[i]=maxValue;
}
}
returnnewArr;
}
相关文章
- java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」
- java语言的特点_Java语言有什么特点?
- 中级java笔试题_Java中级面试题合集[通俗易懂]
- java出现中文乱码_JAVA中文显示乱码问题「建议收藏」
- setproperty java_Java中System.setProperty()的用法
- 【说站】java桥接模式的优缺点
- java对象转换为json字符串_复杂json字符串转对象
- Java 19 正式发布
- Java关键字this和super的用途
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
- java socket详解_Java Socket 编程原理及教程「建议收藏」
- java查找字符的方法_Java字符串查找(3种方法)
- 【错误记录】Java AWT 图形界面编程报错 ( Exception in thread “main“ java.awt.AWTError: BoxLayout can‘t be shared )
- 畅销15年的Java经典,再次重磅升级!速送3套,先到先得!
- 文件或是文件夹打包压缩成zip格式的Java代码详解编程语言
- Java金额每隔三位加上一个逗号详解编程语言
- java中获取request与response对象的方法详解编程语言
- 使用Java操作MySQL数据库快速精准查询(java查询mysql数据库)
- Linux下快速编写高效的Java代码(linux写java)
- 数据库实现Java程序与Oracle数据库的连接(java链接oracle)
- 数据清理实现Redis Java中过期数据的有效清理(redisjava过期)
- 从0到1,Java Web网站架构搭建的技术演进
- Java轻松处理Redis缓存(java处理redis)
- java实现excel导入数据的工具类