ACWING刷題 786 第k個數

2021-10-09 14:57:40 字數 528 閱讀 4614

原題鏈結

做法:快速排序為基礎,用k與當前區間長度比較,進行區間剪枝,時間複雜度o(2n)

#include

using

namespace std;

const

int n=

100010

;int a[n]

;int

quick_sort

(int l,

int r,

int k)

int llen=j-l+1;

//左區間長度

if(k<=llen)

return

quick_sort

(l,j,k)

;//若k<=左區間,則在左區間遞迴

return

quick_sort

(j+1

,r,k-llen)

;//右區間遞迴,注意3引數,右區間要找第k-llen個

}int

main()

題解 AcWing 786 第K個數

acwing 786.第k個數 引用星丶空大佬的題解,很不錯的思路,奇怪的思路 1 並沒有 寫乙個和yxc大佬不同但差不多思想的方法,更簡單 給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列從小到大排序後的第k個數。樣例輸入格式 第一行包含兩個整數 n 和 k。第二行包含 n ...

AcWing 786 第k個數(C 演算法)

輸入格式 第一行包含兩個整數 n 和 k。第二行包含 n 個整數 所有整數均在1 109範圍內 表示整數數列。輸出格式 輸出乙個整數,表示數列的第k小數。資料範圍 1 n 100000,1 k n 輸入樣例 5 32 4 1 5 3 輸出樣例 32 基本思想 用快速選擇演算法。當分界點x左邊 有sl...

刷題之路 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。最優方法可以做到n log k 做法就是使用堆排序,只維護乙個規模為k的大根堆,之後遍歷所有的數字,一旦後面數字比堆頂小,則交換兩數,並重新調整大根堆,遍歷完成後堆中元素就是最小的...