內容會持續更新,有錯誤的地方歡迎指正,謝謝!
有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。
給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。
輸入例子:[1,3,5,2,2],5,3
輸出例子:2
比這套卷子前面兩道題簡單多了!送分題,知道快排的都知道partition這個用於分割槽的函式,那麼利用partition函式就解決了。
思想就是快速排序的劃分,步驟如下:
進行一次快排,假設得到的中軸為mid,大的放mid前面,小的放mid後面判斷 mid - low + 1 == k ,如果成立,直接輸出a[mid]如果 mid - low + 1 > k, 則第k大的元素在前半段,此時更新right = mid - 1,繼續進行步驟1如果mid - low + 1 < k, 則第k大的元素在後半段,此時更新left = mid + 1, 且 k = k - (mid - low + 1),繼續步驟1
由於常規快排要得到整體有序的陣列,而此方法每次可以去掉「一半」的元素,從而變成了線性查詢,故實際的複雜度不是o(nlgn),而是o(n)。
所用資料結構:vector
class finder
a[left]=p;
return left;
}int findkth(vector
& a, int k, int low, int high)//多型
int findkth(vector
a, int n, int k)
};
Data Structures 尋找第k大
對於bst,無壓力的可以,所以無需贅言,請見 1 program bst kthfind input,output 2 type point node 3 node record4 data,leftsum,rightsum longint 5 left,right point 6 end 7 va...
牛客網刷題 尋找第K大
有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。輸入描述 輸入乙個陣列 陣列長度 k大 輸出描述 輸出k大座標 輸入 1,3,5,2,2 5,3 輸出 2本題與之前的最小的k個數思路相類似...
尋找第K大的數字
include using namespace std 快速排序的劃分函式 int partition int data,int i,int j 將 x的元素換到左邊區域 將 x的元素換到右邊區域 if i r l 1 k 1 k應該在 1,r l 1 之間 throw std exception ...