尋找無序數組中第n大的數

class Solution {
public:
    /**
     * @param n: An integer
     * @param nums: An array
     * @return: the Kth largest element
     */
    void search(int left, int right, vector<int>&nums,int n)
{
	int temp = nums[left];
	int i = left, j = right;
	while (i != j)
	{
		while (nums[j] >= temp&&i < j) { j--; }
		while (nums[i] <= temp&&i < j) { i++; }
		if (i < j) { int t = nums[j]; nums[j] = nums[i]; nums[i] = t; }
	}
	nums[left] = nums[i];
	nums[i] = temp;
	if (right - i == n - 1)
	{
		return;
	}
	else if (right - (i-1) >n)
	{
		search(i + 1, right,nums,n);
	}
	else
	{
		search(left, i - 1, nums, n - (right - (i - 1)));
	}
}
    int kthLargestElement(int n, vector<int> &nums) {
        // write your code here
        search(0, nums.size() - 1,nums, n);
	    return nums[nums.size() - n];
        
    }
};

通過80%,超時了,肯定有更優的解法。

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