Leetcode#215. Kth Largest Element in an Array

5人阅读 评论(0) 收藏 举报
分类:

题目描述:找出数组中第 k 大的数

解题思路:

  • 使用数组内容构建一个最大堆/最小堆,通过每次pop出堆顶后继续维护堆的结构,直到满足一定的次数(最大堆k-1次,最小堆size-k次),堆顶的元素就是第k大的数字;
  • 利用快排的partition函数思想,选定一个数组内的值作为pivot,将小于pivot的数字放到pivot右边,大于等于pivot的数字放到pivot左边。接着判断两边数字的数量,如果左边的数量小于k个,说明第k大的数字存在于pivot及pivot右边的区域之内,对右半区执行partition函数;如果右边的数量小于k个,说明第k大的数字在pivot和pivot左边的区域之内,对左半区执行partition函数。直到左半区刚好有k-1个数,那么第k大的数就已经找到了。
  • *
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) 
    {
        //建一个最大堆
        make_heap(nums.begin(), nums.end());
        int ret;
        for(int i = 0; i < k; ++i)
        {
            ret = nums.front();
            //第一个元素被移到最后面,剩下的元素继续维持最大堆
            pop_heap(nums.begin(), nums.end());
            //将最后一个元素出堆
            nums.pop_back();
        }
        //以上执行了k步,被取出来的数就是第 k 大的数
        return ret;
    }
};
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) 
    {
        int low = 0, high = nums.size() - 1;
        while(low <= high)
        {
            int i = low;
            int j = high;
            int pivot = nums[low];
            while(i <= j)
            {
                while(i <= j && nums[i] >= pivot)
                    i++;
                while(i <= j && nums[j] <= pivot)
                    j--;
                if(i < j)
                    swap(nums[i], nums[j]);
            }
            swap(nums[low], nums[j]);
            if(j == k - 1)
                return nums[j];
            else if(j < k - 1)
                low = j + 1;
            else
                high = j - 1;
        }
    }
};
查看评论

LeetCode215:Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so...
  • u012501459
  • u012501459
  • 2015-07-09 21:36:41
  • 1146

【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】

【215-Kth Largest Element in an Array(数组中第K大的数)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github...
  • DERRANTCM
  • DERRANTCM
  • 2015-08-28 06:57:17
  • 4582

leetcode 215: Kth Largest Element in an Array

leetcode 215: Kth Largest Element in an Array
  • xudli
  • xudli
  • 2015-05-29 08:47:21
  • 10773

LeetCode 215:Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so...
  • sunao2002002
  • sunao2002002
  • 2015-05-27 00:11:33
  • 3322

[leetcode] 215. Kth Largest Element in an Array 解题报告

题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ Find the kth largest element i...
  • qq508618087
  • qq508618087
  • 2016-02-21 07:29:34
  • 1141

【LEETCODE】215-Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so...
  • aliceyangxi1987
  • aliceyangxi1987
  • 2015-12-10 19:31:21
  • 348

215. Kth Largest Element in an Array-Python

利用Python最大堆解决问题。Find the kth largest element in an unsorted array. Note that it is the kth largest e...
  • daigualu
  • daigualu
  • 2017-07-07 17:42:28
  • 621

LeetCode215. Kth Largest Element in an Array分治法

题意:找出无序序列里第k大的元素刚开始我是这样想的:选取序列第0个元素,判断有多少元素比它大、比它小、和它相等,然后缩小问题规模。然后做完之后,leetcode出现memory limit,占用空间过...
  • wmdshhz0404
  • wmdshhz0404
  • 2016-10-12 11:50:27
  • 345

LeetCode Kth Largest Element in an Array

LeetCode Kth Largest Element in an Array题目思路利用快排的思想,每次都能得到一个位置mid; 并且我们知道在mid之前的数都是大于nums[mid]; 并且...
  • u012925008
  • u012925008
  • 2015-05-25 09:00:06
  • 1865

LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解

题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ 215. Kth Largest Elem...
  • bruce128
  • bruce128
  • 2016-02-23 14:00:40
  • 1926
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2066
    排名: 2万+