題目描述:
在陣列中找到第k大的元素
樣例
給出陣列 [9,3,2,4,8],第三大的元素是 4
給出陣列 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此類推
挑戰
要求時間複雜度為o(n),空間複雜度為o(1)
注意事項
你可以交換陣列中的元素的位置
1.使用選擇排序進行求解:(此種方法滿足不了時間複雜度的要求,演算法複雜度為o(n^2))
class solution
int kmax(int n,vector&nums,int left,int right)
return partition(nums, 0, nums.size() - 1, nums.size() - n);
}private:
int partition(vector&nums, int start, int end, int n)
int left = start, right = end;
int pivot = nums[(start + end) / 2];
while (left <= right)
while (left <= right && nums[right] > pivot)
if (left <= right)
}if (n <= right)
if (n >= left)
return nums[n];
}
void swap(vector&nums, int i, int j)
};
5 第k大元素
2017.9.14 昨天做了一整天的題。首先使用了氣泡排序,我知道會超時。但還是做了一遍,心想複習一下舊的知識也是極好的。於是,果然超時了。但是毫不氣餒。想,要不用快速排序試一試。但是自作聰明的以為這題一定是在考堆排序。然而堆排序是我最不會的排序方式,但還是下定決心開始學習。好不容易學會了之後,果然...
第k大元素
在陣列中找到第k大的元素 最先想到的是簡單排序,但是簡單排序超時,於是想到改造快排,快排的思想是每次確定乙個元素在陣列中的下標,如果確定的下標為k那該元素為k大,若下標大於k,第k大在改下標之前.class solution public int pat int nums,int start,int...
第K大元素
在陣列中找到第k大的元素。給出陣列 9,3,2,4,8 第三大的元素是4 給出陣列 1,2,3,4,5 第一大的元素是5,第二大的元素是4,第三大的元素是3,以此類推 要求時間複雜度為o n 空間複雜度為o 1 如果不考慮時間複雜度和空間複雜度,這道題目有很多種方法,利用一種排序演算法將陣列倒敘排序...