求第k小數,無非就是考查排序,請參考我最新的博文吧求第k小數----直接使用priority_queue,在網上看到許多使用快排來求第k小數都是認為第k小就是排好序陣列中第k個元素,但是如果陣列中有相同的元素呢,例如(1,2,2,2,3,5),認為第三小是3還是2呢?我刷題時遇到的是認為是3。沒有想到什麼好辦法,先排序再找第k小,直接寫倆排序演算法好了,乙個冒泡乙個快排,但個人認為堆排序是最好的,可以維護乙個大小為k的大頂堆,每次取到最大的元素,如果當前元素小於堆頂元素(最大)則放入堆中,最終堆中最底部的元素就是第k小數。
氣泡排序沒什麼好說的吧,直接附上**好了,沒有用優化的氣泡排序,優化的也就是加乙個判斷,之所以寫出來這個是因為發現在刷題時這種方法也能pass。
#includeusing namespace std;
int main()
cin>>k;
for(int i=0;i=i+1;j--)
cin>>k;
quicksort(a,0,n-1);
cout《我的思路很簡單就是先排序再求第k小,但是如果用堆排序的話應該能有效減小規模,因為要求的是第k小,並不需要把所有陣列都排序,堆排使用空間還比較小。
輸入:2 1 3 5 2 2
輸出:
NOJ 1574 求第k小數
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述求第k小數 輸入先輸入乙個小於10000的正整數n,再輸入n個整數,最後輸入乙個小於等於n的正整數k,輸出輸出其中第k小的數。輸入樣例 52 98 34512 8492 1000 2輸出樣例 提示 思路 可以採用二分法思想,先讓...
關於求各種第K小數的總結
大前提 題目敘述中若未指定n,m,q三個變數,則預設n表示序列長度,m表示總操作次數 包括修改和查詢 q表示詢問總次數.給定乙個長度為n的整數序列,求序列中第k小的數字.時間複雜度 多次詢問o nlogn 單次詢問o n 空間複雜度 o n 可以採用諸多複雜度為o nlogn 的排序方法,如快速排序...
牛客 第k小數 線性尋找第 k 小數
題目大意 給出長度為 n 的數列 a 要求找到第 k 小的數 題目分析 因為資料給的足夠大,所以約束就是必須線性完成操作,stl 中的 nth element 函式可以完美實現操作,算是學到了一波,格式 nth element a.begin a.begin k a.end 那麼 a k 就是第 k...