您的位置:首页 > 财经 > 产业 > LeetCode刷题:找到第K大的元素

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

2025/2/24 0:54:30 来源:https://blog.csdn.net/m0_56902859/article/details/142067582  浏览:    关键词: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);}}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com