美文网首页
第k大元素

第k大元素

作者: 杰米 | 来源:发表于2016-10-08 01:42 被阅读23次
在数组中找到第k大的元素

 注意事项

你可以交换数组中的元素的位置

您在真实的面试中是否遇到过这个题? Yes
样例
给出数组 [9,3,2,4,8],第三大的元素是 4

给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推

第一种方法 快排变种

class Solution {
public:
    /*
     * param k : description of k
     * param nums : description of array and index 0 ~ n-1
     * return: description of return
     */
    int kthLargestElement(int k, vector<int> nums) {
        // write your code here
        int result = 4;
        find(nums,0,nums.size()-1,k,result);
        return result;
    }
    
    void find(vector<int>&nums,int left,int right,int k,int& result) {
        
        
        if (left == right) {
            result = nums[left];
            return;
        }
        
        int pvoit = nums[right];

        int mid = partition(nums,pvoit,left,right);
        int temp = nums[mid];
        nums[right] = temp;
        nums[mid] = pvoit;
   //分治思想 分到最后都会有mid - left + 1 == k
        if (mid - left + 1 == k) {
            result = nums[mid]; 
        } else if (mid -1 - left + 1 >= k) {
             find(nums,left,mid-1,k,result);
        } else if (mid - left + 1 < k) {
            find(nums,mid+1,right,k - mid + left - 1,result);
        }
        
    }
    
    int partition(vector<int>&nums,int pvoit,int left,int right) {
        int i = left-1;
        int j = right;
        
        while( i < j ) {
          while(i < j && nums[++i] > pvoit);
          while(i < j && nums[--j] < pvoit);
          
          int temp = nums[i];
          nums[i] = nums[j];
          nums[j] = temp;
          
        }
        
        return j;

    }
    
};

相关文章

  • 快速排序

    在数组中找到第k大的元素

  • QuickSort的好哥们QuickSelect

    第k大元素 在数组中找到第k大的元素。 样例 给出数组 [9,3,2,4,8],第三大的元素是 4 给出数组 [1...

  • 算法分析 [最大/小值] 2019-02-28

    1. 数组,查找第k大值 215. 数组中的第K个最大元素(元素不重复无序) Kth Largest Elemen...

  • 数据流中的第K大元素

    数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

  • lintcode 5 寻找第k大数

    5. 在数组中找到第k大的元素 在数组中找到第k大的元素 参考 先排序,再查找。最简单,但是最麻烦,如果不止一次的...

  • 力扣 215 数组中的第K个最大元素

    题意:给定一个数组,找到第k个最大的元素 思路:利用快速排序,快速定位第k大的元素,具体可看代码注释 思想:快速排...

  • Leetcode 703 数据流中的第K大元素

    数据流中的第K大元素 题目 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个...

  • 基本算法——BFPRT线性查找算法

    BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPR...

  • 线性查找法(BFPRT)

    BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可...

  • 第k大元素

    (lintcode上面的题解)第k大元素:(从小到大的排序)

网友评论

      本文标题: 第k大元素

      本文链接:https://www.haomeiwen.com/subject/cshuyttx.html