但會修改陣列中的資料,所以這裡有新的不修改資料的思路:
1、用multiset實現自動排序,大小為k,每個數與set中最大的數比較,如果小於則替換。
2、可以用最大堆來實現,方法類似上面的。關鍵是看**注釋在下面。
時間複雜度為:
#include#include#includeusing namespace std;
int numbers[100];
//從vector獲取資料
void getnumbers(vector& numbers)
}//用模板找出第k個數
void templatefindk(const vector& numbers)
//用堆找第k大的數
void heapfindk()
printf("輸入要查詢的數字置\n");
scanf("%d",&k);
int *heap = (int *)malloc(sizeof(int)*k);
int i =0;
while(inumbers;
printf("用模板找\n");
getnumbers(numbers);
templatefindk(numbers);
// printf("用堆來找\n");
heapfindk();
system("pause");
return 0;
}
無序整數陣列中找第k大的數
寫一段程式,找出陣列中第k大小的數,輸出數所在的位置。解法一 我們先假設元素的數量不大,例如在幾千個左右,在這種情況下,那我們就排序一下吧。在這裡,快速排序或堆排序都是不錯的選擇,他們的平均時間複雜度 都是 o n log2n 然後取出前 k 個,o k 總時間複雜度 o n log2n o k o...
無序整數陣列中找第k大的數
經典問題 寫一段程式,找出陣列中第k大的數,輸出數所在的位置。我們先假設元素的數量不大,例如在幾千個左右,在這種情況下,那我們就排序一下吧。在這裡,快速排序或堆排序都是不錯的選擇,他們的平均時間複雜度 都是 o n logn 然後取出前 k 個,o k 總時間複雜度 o n logn o k o n...
nth element 找第k大的數
nth element用於排序乙個區間,它使得位置n上的元素正好誰全排序情況下的第n個元素,而且,當nth element返回的時候,所有按照全排序規則排在位置n之前的元素也都排在位置n之前,按照全排序規則排在n之後的元素全都排在位置n之後。所以,我們使用nth element既可以尋找最好的前k個...