1 #include 2 #include 3 #include 4 #include 5 #include 6view code7using
namespace
std;
89 priority_queuepq;
10int an[3100
];11
int bn[3100
];12
13int
main()
1429
for(int t=0;t)
3033
for(int t=1;t)
3442}43
}44for(int t=0;t)
4549
}50 cout<1
];51
for(int i=n-2;i>=0;i--)
52 cout<
"<
53 cout<
55return0;
56 }
解題步驟:
1.將第一序列讀入data1向量中,並按公升序排序。
2.將資料讀入data2向量中,並按公升序排序。
將data2[0] + data1[i] ( 0<=i<=n-1)讀入dataq向量中
用make_heap對dataq建堆。
然後data2[1] + data1[i] (0<=i<=n-1),如果data2[1] + data1[i]比堆dataq的頂點大,則退出,否則刪除
堆的頂點,插入data2[1] + data1[i]。然後是data2[2],...data2[n - 1]
3.將dataq的資料拷貝到data1中,並對data1按公升序排序
4.迴圈2,3步,直到所有資料讀入完畢。
5.列印data1中的資料即為結果。
按此方法,每次只需和當前最小的k項中最大的那項比較就行,而不用比較n^m次
CI20 6 求前K個數
描述乙個演算法,在十億個 n 數中找出前一百萬 k 大的數字。假設記憶體裡可以放下十億個數。思路 1 直接排序,然後輸出前一百萬個數,時間複雜度為o n logn 2 維護乙個大小為一百萬的大頂推,然後遍歷完十億個數,輸出大頂推的數即可,時間複雜度為o n logk 該思路適合大資料,尤其是記憶體放...
前 K 個高頻元素, 求Top N
給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...
求序列第K大演算法總結
參考部落格 傳送門 在上面的部落格中介紹了求序列第k大的幾種演算法,感覺收益良多,其中最精巧的還是利用快速排序的思想o n 查詢的演算法。仔細學習以後我將其中的幾個實現了一下。解法 1 將亂序陣列從大到小進行排序然後取出前k大,總的時間複雜度為o nlogn 解法 2 利用選擇排序或互動排序,取出前...