zoukankan      html  css  js  c++  java
  • LintCode-第k大元素

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

    您在真实的面试中是否遇到过这个题? 
    Yes
    例子

    给出数组[9,3,2,4,8]第三大的元素是4

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

    注意

    你能够交换数组中的元素的位置

    挑战

    要求时间复杂度为O(n),空间复杂度为O(1)

    标签 Expand  

    相关题目 Expand 


    分析:利用快排的思想。不断partition,

    代码:

    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
            return findKthLargestElement(k,nums,0,nums.size()-1);
        }
        int findKthLargestElement(int k,vector<int>& nums,int start,int end)
        {
            if(start==end)
                return nums[start];
            int index = partition(nums,start,end);
            if(end-index+1==k)
                return nums[index];
            else if(end-index+1>k)
                return findKthLargestElement(k,nums,index+1,end);
            else
                return findKthLargestElement(k-(end-index+1),nums,start,index-1);
        }
        int partition(vector<int>&nums,int start,int end)
        {
            int x =  (start+end)/2;
            swap(nums[start],nums[x]);
            int i = start+1;
            int j = i;
            while(i<=end&&j<=end)
            {
                if(nums[j]<nums[start])
                {
                    swap(nums[i],nums[j]);
                    i++;
                }
                j++;
            }
            swap(nums[start],nums[i-1]);
            return i-1;
        }
    };
    


  • 相关阅读:
    redis.conf
    redis 超全的操作
    Oracle数据库导入导出命令
    技巧总结
    C#把Object对象转换成JSON串
    vscode c++ 开发环境踩坑
    vscode python 开发环境+qgis开发
    算法设计与分析:贪心算法
    操作系统概念习题
    贪心算法:贪心选择性与优化子结构
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7007226.html
Copyright © 2011-2022 走看看