lintcode 中等題:kth-largest-element 第k大元素


題目

第k大元素

在數組中找到第k大的元素

樣例

給出數組[9,3,2,4,8]第三大的元素是4

給出數組 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此類推

注意

你可以交換數組中的元素的位置

挑戰

要求時間復雜度為O(n),空間復雜度為O(1)

解題

理論快速排序的思想,每次都減半,這個時間復雜度也是O(N),至於為什么就不知道了

class Solution {
    /*
     * @param k : description of k
     * @param nums : array of nums
     * @return: description of return
     */
    public int kthLargestElement(int k, int[] nums) {
        // write your code here
        return quickSort(nums,0,nums.length-1,k);
        
    }
    public int quickSort(int[] nums,int left,int right,int k){
        int i = left;
        int j = right;
        int tmp = nums[i];
        while(i<j){
            while(i<j && tmp>=nums[j]) j--;
            if(i<j){
                nums[i]=nums[j];
                i++;
            }
            while(i<j && tmp<nums[i]) i++;
            if(i<j){
                nums[j]=nums[i];
                j--;
            }
            
        }
        if(i == k -1){
            return tmp;
        }else if(i< k-1){
            return quickSort(nums,i+1,right,k);
        }else{
            return quickSort(nums,left,i-1,k);
        }
    }
};
View Code

 

Python

class Solution:
    # @param k & A a integer and an array
    # @return ans a integer
    def kthLargestElement(self, k, A):
        return self.quickSort(A,0,len(A)-1,k)
        
    def quickSort(self,nums,left,right,k):
        i = left
        j = right
        tmp = nums[i]
        while i<j:
            while i<j and tmp>=nums[j]:
                j -= 1
            if i<j:
                nums[i] = nums[j]
                i += 1
            while i<j and tmp< nums[i]:
                i += 1
            if i<j:
                nums[j] = nums[i]
                j -= 1
        if i == k-1:
            return tmp
        elif i< k-1:
            return self.quickSort(nums,i+1,right,k)
        else:
            return self.quickSort(nums,left,i-1,k)
Python Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM