215 Kth Largest Element in an Array 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,它是数组有序排列后的第 k 个最大元素,而不是第 k 个不同元素。
例如,
给出 [3,2,1,5,6,4] 和 k = 2,返回 5。
注意事项:
你可以假设 k 总是有效的,1 ≤ k ≤ 数组的长度。
详见:https://leetcode.com/problems/kth-largest-element-in-an-array/description/
Java实现:
方法一:
class Solution {
    public int findKthLargest(int[] nums, int k) {
        int n=nums.length;
        if(n<k||nums==null){
            return -1;
        }
        int low=0;
        int high=n-1;
        int m=n-k;
        while(true){
            int index=partition(nums,low,high);
            if(index==m){
                return nums[index];
            }else if(index>m){
                high=index-1;
                index=partition(nums,low,high);
            }else{
                low=index+1;
                index=partition(nums,low,high);
            }
        }
    }
    private int partition(int[] nums,int low,int high){
        int pivot=nums[low];
        while(low<high){
            while(low<high&&nums[high]>=pivot){
                --high;
            }
            nums[low]=nums[high];
            while(low<high&&nums[low]<=pivot){
                ++low;
            }
            nums[high]=nums[low];
        }
        nums[low]=pivot;
        return low;
    }
}
方法二:
class Solution {
    public int findKthLargest(int[] nums, int k) {
        int n=nums.length;
        if(n<k||nums==null){
            return -1;
        }
        PriorityQueue<Integer> minHeap=new PriorityQueue<Integer>();
        for(int i=0;i<n;++i){
            if(i<k){
                minHeap.offer(nums[i]);
            }else if(minHeap.peek()<nums[i]){
                minHeap.poll();
                minHeap.offer(nums[i]);
            }
        }
        return minHeap.peek();
    }
}
C++实现:
方法一:
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int,vector<int>,greater<int>> minH;
        for(int i=0;i<nums.size();++i)
        {
            if(minH.size()<k)
            {
                minH.push(nums[i]);
            }
            else
            {
                if(minH.top()<nums[i])
                {
                    minH.pop();
                    minH.push(nums[i]);
                }
            }
        }
        return minH.top();
    }
};
方法二:
class Solution {
public:
    int partition(vector<int>& nums, int left, int right) {
        int pivot = nums[left];
        int l = left + 1, r = right;
        while (l <= r) {
            if (nums[l] < pivot && nums[r] > pivot)
                swap(nums[l++], nums[r--]);
            if (nums[l] >= pivot) l++;
            if (nums[r] <= pivot) r--;
        }
        swap(nums[left], nums[r]);
        return r;
    }
    int findKthLargest(vector<int>& nums, int k) {
        int left = 0, right = nums.size() - 1;
        while (true) {
            int pos = partition(nums, left, right);
            if (pos == k - 1) return nums[pos];
            if (pos > k - 1) right = pos - 1;
            else left = pos + 1;
        }
    }
};
参考:https://www.cnblogs.com/grandyang/p/4539757.html
215 Kth Largest Element in an Array 数组中的第K个最大元素的更多相关文章
- [LeetCode] 215. Kth Largest Element in an Array 数组中第k大的数字
		Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ... 
- [leetcode]215. Kth Largest Element in an Array 数组中第k大的元素
		Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ... 
- [LeetCode] Kth Largest Element in a Stream 数据流中的第K大的元素
		Design a class to find the kth largest element in a stream. Note that it is the kth largest element ... 
- [LeetCode] Kth Largest Element in an Array 数组中第k大的数字
		Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ... 
- 剑指offer 最小的k个数 、 leetcode 215. Kth Largest Element in an Array 、295. Find Median from Data Stream(剑指 数据流中位数)
		注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ... 
- 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array
		传送门 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5, ... 
- LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解
		题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ 215. Kth Largest Element in an A ... 
- LN : leetcode 215 Kth Largest Element in an Array
		lc 215 Kth Largest Element in an Array 215 Kth Largest Element in an Array Find the kth largest elem ... 
- 【LeetCode】215. Kth Largest Element in an Array (2 solutions)
		Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is t ... 
随机推荐
- C#&.NET高级面试题
			转自http://chaoyouzhuo.blog.163.com/blog/static/1263760012011109114131316/ 1. DateTime.Parse(myString) ... 
- 机器学习笔记之PCA-SIFT总结
			不多说,直接上干货! PCA-SIFT算法在描述子构建上作了创新,主要是 将统计学中的主成分分析(PCA)应用于对描述子向量的降维,以提高匹配效率 . PCA 的原理是:一般有效信号的方差大,噪声的方 ... 
- Ubuntu16.04下安装Tensorflow CPU版本(图文详解)
			不多说,直接上干货! 推荐 全网最详细的基于Ubuntu14.04/16.04 + Anaconda2 / Anaconda3 + Python2.7/3.4/3.5/3.6安装Tensorflow详 ... 
- JavaScript基本类型与引用类型(二)
			前文已经对基本类型和引用类型作了简单的介绍,本文将进一步介绍基本类型和引用类型. 基本包装类型 为了方便操作基本类型的值,JavaScript提供了特殊的引用类型:Boolean.Number.Str ... 
- java垃圾回收机制的使用
			public class Test { public static void main(String[] args) throws Exception { Book b=new Book(true); ... 
- YTU 2438: 三人三鬼
			2438: 三人三鬼 时间限制: 1 Sec 内存限制: 128 MB 提交: 35 解决: 9 题目描述 目标是将东岸的3人3鬼通过一只小船转移到西岸,希望以尽可能少的摆渡次数. 船的容量有限, ... 
- 并不对劲的AC自动机
			这像是能解决所有问题的样子(并不).AC自动机之所以叫AC自动机是因为它能解决所有AC自动机的题. 其实只能解决的是很多模式串匹配一个母串的问题. 把kmp中的next数组得到下一次跳转的位置看成特殊 ... 
- luogu 4720 【模板】扩展卢卡斯
			题目大意: 求$C_n^m \mod p$,p不一定为质数 思路: 首先可以将$p$分解为$p1^{a1}*p2^{a2}*...*pk^{ak}$,对于这些部分可以使用$CRT$合并 对于每个$p_ ... 
- poj 3517(约瑟夫环问题)
			And Then There Was One Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4873 Accepted: ... 
- 我的JSP中文编码解决方案
			虽然以前就知道编码问题,但是一直没有遇到问题,以前用asp.net和php的时候,感觉很自然地写程序,没怎么特别处理编码问题,这回改用java写,真心被恶心到了. 进行了一番查阅学习后,终于搞明白了一 ... 
