問題描述:在陣列中找到第 k 大的元素。要求時間複雜度為o(n),空間複雜度為o(1)
分析:此類問題為排序問題,主要難點在於時間複雜度為o(n),採用快速排序演算法進行排序
function quicksort(nums,k,start,end)
var left=start,right=end;
var key=nums[math.floor((start+end)/2)];
while(left<=right)
if(left<=right)
} if(k<=right)
if(k>=left)
return nums[k]; }
function swap(nums,i,j)
1、基數的選擇影響時間複雜度,o(選最左邊的為基數)>o(選最中間的數為基數),一般來說當塊劃分的相對平均的時候時間複雜度較低
2、js中/得出的結果為實際值,如果要取整需要使用相應的函式如(parseint丟棄小數部分,保留整數,floor向下取整,round四捨五入,ceil向上取整)
程式設計題 尋找第K大
內容會持續更新,有錯誤的地方歡迎指正,謝謝 有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。輸入例子 1,3,5,2,2 5,3 輸出例子 2 比這套卷子前面兩道題簡單多了!送分題,知道快...
尋找陣列中的第K大的元素
遇到了乙個很簡單而有意思的問題,可以看出不同的演算法策略對這個問題求解的優化過程。問題 尋找陣列中的第k大的元素。最簡單的想法是直接進行排序,演算法複雜度是o n logn 這麼做很明顯比較低效率,因為不要求別的資訊只要計算出第k大的元素。當然,如果在某種情況下需要頻繁訪問第k大的元素就可以先進行一...
尋找陣列中第K大數
using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace try catch exception exc conso...