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