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;
        }
    };
    


  • 相关阅读:
    数组类型
    约瑟夫环问题
    const在c和c++中地位不同
    Makefile学习之路——4
    单链表综合操作
    算法初探——大O表示法
    数据结构实用概念
    Makefile学习之路——3
    翻转字符串
    Makefile学习之路——2
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7007226.html
Copyright © 2011-2022 走看看