当前位置: 首页 > news >正文

LeetCode刷题:找到第K大的元素

本题其实就是考察排序算法,为了减低时间复杂度,所以采用堆排序
 

import java.security.Key;
import java.util.Scanner;public class FindKtopElements {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String line = scanner.nextLine();int k = scanner.nextInt();String[] strArrary = line.split(" ");int[] intArrary = new int[strArrary.length];for (int i=0;i<intArrary.length;i++){intArrary[i] = Integer.parseInt(strArrary[i]);}//todo:排序(升序)int result = k_max(intArrary, k);System.out.print(result);}//使用堆排序实现数组排序private static int k_max(int[] arary, int k) {headSort(arary);return arary[arary.length-k];}private static void headSort(int[] arary) {int n=arary.length;//从最后非叶子节点构建大根堆for(int i=n/2-1;i>=0;i--){headBuild(arary,n,i);}//首尾交换后,从根结点重构大根堆for(int i=n-1;i>0;i--){int temp =arary[0];arary[0]=arary[i];arary[i]=temp;headBuild(arary,i,0);}}//构建大根堆private static void headBuild(int[] arary, int n, int i) {int largest=i;int left=2*i+1;int right=2*i+2;if (left<n && arary[left]>arary[largest]){largest=left;}if (right<n && arary[right]>arary[largest]){largest=right;}if(largest !=i){int temp=arary[i];arary[i]=arary[largest];arary[largest]=temp;headBuild(arary,n,largest);}}}


http://www.mrgr.cn/news/23036.html

相关文章:

  • 基于人工智能的智能垃圾分类系统
  • 低代码平台:助力企业数字化转型的利器
  • 请解释Java中的线程局部变量的作用和使用场景。什么是Java中的Lock接口?它与synchronized关键字有何区别?
  • 【JUC】13-原子类
  • C++学习笔记----6、内存管理(五)---- 智能指针(1)
  • 学习threejs,创建立方体,并执行旋转动画
  • 本地服务器部署Text generation并添加code llama实现远程多人协作
  • 线程池的应用
  • 九月五日(k8s配置)
  • 外贸人提高潜在客户EDM电子邮件营销参与度的一些建议
  • 电池的电-热-寿命模型是什么?
  • 在debian11下的tightvncserver配置
  • 安全产品概述
  • oracle数据库报ORA-00060错误(死锁)的解决办法
  • AI人工智能如何重塑我们的世界,引领无限可能
  • 收藏:B站相当精彩的关于向量数据库的2个视频
  • 百望云 X 爱普生 :对接乐企实现税企直连,节省数十万元管理成本!
  • std::fixed
  • windows下载安装perl
  • java中普通代码块和静态代码块之间的区别(java小知识点)