尋找第K大 總結 c

2021-10-24 08:36:47 字數 1402 閱讀 9705

nowcoder link

題目描述有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。測試樣例:

[1,3,5,2,2],5,3

返回:2

思路:快排+二分法

像快排一樣,但是每次排完需要與k進行比較,具體比較看**。

1.由於一般排序是從小到大排的;

所以注意這裡比較的時候是 n-i 與 k進行比較;

2.或者從大到小排,則比較 i+1 與 k的大小;

**:

1. 從小到大排序:

class

finder

intquick_sort

(vector<

int>

& a,

int start,

int end,

int n,

int k)

swap

(a[start]

, a[j]);

if(n - j == k)

return a[j]

;else

if(n - j < k) res =

quick_sort

(a, start, j-

1, n, k)

;else

if(n - j > k) res =

quick_sort

(a, j+

1, end, n, k)

;return res;}}

;

2. 從大到小排序:

class

finder

intquick_sort

(vector<

int>

& a,

int start,

int end,

int n,

int k)

swap

(a[start]

, a[i]);

if(i+

1== k)

return a[i]

;else

if(i+

1> k) res =

quick_sort

(a, start, i-

1, n, k)

;else

if(i+

1< k) res =

quick_sort

(a, i+

1, end, n, k)

;return res;}}

;

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...

c 求區間第k大數 尋找第K大的數的方法總結

今天看演算法分析是,看到乙個這樣的問題,就是在一堆資料中查詢到第k個大的值。所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找出從大到小順序的第 前 k個數的問題。解法1 我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時間複雜度為o n logn k 解法2 利用...

尋找第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 ...