leetcode 數組中的第K個最大元素 快排思想

在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

示例 1:

輸入:
[3,2,1,5,6,4] 和
 k = 2
輸出: 5

示例 2:

輸入:
[3,2,3,1,2,4,5,5,6] 和
 k = 4
輸出: 4

說明:

你可以假設 k 總是有效的,且 1 ≤ k ≤ 數組的長度。

快排思想。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k)
    {
        return quick_sort(nums,0,nums.size()-1,k);
    }
    int quick_sort(vector<int>& data, int left, int right, int k)
    {
        int i=left;
        int j=left;
        int pos=data[right];
        int len=right-left+1;
        if(left<right)
        {
            for(;j<right;j++)
            {
                if(data[j]>pos)
                {
                    int tmp=data[i];
                    data[i]=data[j];
                    data[j]=tmp;
                    i++;
                }
            }
            data[j]=data[i];
            data[i]=pos;
            int w_max=i-left+1;   //pos此時處在i處,i-left+1表示pos是第幾大的數
            if(w_max==k)
            {
                return pos;
            }
            else if(w_max<k)  //比k大的數在右邊,則查詢右邊第k-w_max大的數
            {
                return quick_sort(data,i+1,right,k-w_max);
            }
            else            //比k大的數在左邊,則查詢左邊第k大
                return quick_sort(data,left,i-1,k);
        }
        else
            return pos;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章