尋找第K大的數

2021-10-23 23:23:14 字數 944 閱讀 3499

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。

給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。

測試樣例:

[1,3,5,2,2],5,3
返回:2
快排的思想:例如找49個元素裡面第24大的元素,那麼按如下步驟:

1.進行一次快排(將大的元素放在前半段,小的元素放在後半段),假設得到的中軸為p

2.判斷 p - low + 1 == k ,如果成立,直接輸出a[p],(因為前半段有k - 1個大於a[p]的元素,故a[p]為第k大的元素)

3.如果 p - low + 1 > k, 則第k大的元素在前半段,此時更新high = p - 1,繼續進行步驟1

4.如果p - low + 1 <  k, 則第k大的元素在後半段, 此時更新low = p + 1, 且 k = k - (p - low + 1),繼續步驟1.

#include#includeusing namespace std;

int partation(vector&arr, int low, int high)

arr[high]=arr[low];

}arr[low]=key;

return low;

}int findkth(vector& arr, int low, int high, int k)else if(povit-low+1 < k)else

}int findkth(vectora, int n, int k)

int main();

cout

return 0;

}

尋找第K大的數

題目描述 要求在n個不重複的整數中,找出第k大的整數 其中0輸入第一行為兩個正整數n k 第二行為n個整數,輸入保證這n個整數兩兩相異,每個整數的範圍在 1000000到1000000之間 輸出輸出第k大的整數值 樣例輸入 5 33 2 4 5 1 樣例輸出 3 如下 include include...

尋找第K大的數

在一堆資料中查詢到第k個大的值。名稱是 設計一組n個數,確定其中第k個最大值,這是乙個選擇問題,解決這個問題的方法很多。所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找出從大到小順序的第 前 k個數的問題。解法1 我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時...

尋找第k大的數

給定乙個整數陣列arr,同時給定它的大小n和要找的k k在1到n之間 返回第k大的數。解法一 結合快排思想,將陣列從大到小排序的過程中返回確定好的元素的下標,與k比較,將範圍逐漸縮小。public class test int n findkth arr,5,2 system.out.println...