在乙個陣列中找出top K的數

2021-08-09 23:49:49 字數 1161 閱讀 8560

這個基本都是老生常談了,看資料量有多大,建乙個小根堆,或者用快速排序的方法來完成這個題。下面給出快速排序的方法,直接上**了。

#include 

#include

#include

void quicksort(int arr, int low, int high)

arr[i] = val;

quicksort(arr, low, i-1);

quicksort(arr, i+1, high);

}int quickselect(int arr, int low, int high, int k)

arr[i] = val;

if (i == k || i == k+1) else

if (i < k) else

return0;}

int main(int argc, char *argv)

; int len = sizeof(arr)/sizeof(int);

int i = 0;

std::cout

<< "org data:"

<< std::endl;

for (i = 0; i < len; i++)

std::cout

<< arr[i] << " ";

std::cout

<< std::endl;

/*quicksort(arr, 0, len-1);

std::cout << "sorted data:" << std::endl;

for (i = 0; i < len; i++)

std::cout << arr[i] << " ";

std::cout << std::endl;

*/int k = 5;

quickselect(arr, 0, len-1, k-1);

std::cout

<< "top k data:"

<< std::endl;

for (i = 0; i < len; i++)

std::cout

<< arr[i] << " ";

std::cout

<< std::endl;

return

0;}

找出乙個陣列中的」單身「

已知乙個陣列中,除了乙個數字出現一次外,其他數字都出現兩次,試找出這個數 思路分析 當看到這個題目,我就想,既然只有乙個數出現一次,那麼我們可以遍歷這個陣列,只要遇到相同的兩 個 數,就把它們置為乙個比較大的數,最後輸出那個沒有被改變的數。define crt secure no warnings ...

在乙個成對陣列中找出單獨的數

今天在連連支付的面試中遇到這樣一道題 在乙個成對陣列中找出單獨的數,例如 1,1,2,3,2,4,3,5,4輸出 5要求時間複雜度為o n 空間複雜度為o 1 當時看到這個題目有點懵了,怎麼可能空間複雜度為o 1 呢?後來面試結束後同學告訴我可以用異或的方法求出來,好吧,這個思路真是很難想到。我對與...

找出乙個陣列中出現次數最大的數

描敘 一大堆資料裡面,數字與數字之間用空格隔開,找出出現次數最多的乙個數字的演算法 includevoid findmosttimesdigit int src int srclen if tempcount maxcount else if tempcount maxcount printf 出現...