思路:只要牽扯到排序,那麼複雜度就是o(nlogn)的了。這裡我們借鑑了快速排序的思想,首先任取乙個數字,將小於它的放到左邊,大於它的放到右邊,然後這個數字的位置就可以確定。通過比較k和這個數字的位置,我們就可以判斷應該在這個數字的左邊還是右邊,然後就可以重複上面的操作。最終複雜度是o(n),但是最終陣列的位置會改變。
**如下:
#include
#define ll long long
using
namespace std;
const
int maxx=
1e6+
100;
int a[maxx]
;int n,k;
inline
intdfs
(int l,
int r)
a[l]
=a[i]
; a[i]
=x;return i;}}
inline
intfind
(int len,
int num)
else
}return a[num];}
intmain()
努力加油a啊,(o)/~ 查詢陣列中第k大的數字
其實之前寫的6 11 求自定型別元素序列的中位數 是求第k大數字的乙個特例。當時是將某一陣列全部按照由大到小排列後,才取出中位數輸出。然後昨天看資料結構時候才發現可以不完全排序,只拍第0到k個之間的就可以了。實現思想和快排類似 選取乙個任意數,將小於這個數的數字排在該數的右邊,大於這個數的數字排在該...
演算法設計 查詢無序陣列中第K大的數字
給出乙個陣列,要求查詢出這個陣列中按順序排第k大的數字。思路 利用快速排序的思想,把陣列中的元素分治,並計算中間值的位置,如果是k,則這個數就是第k大的數字,如果比k小,那麼再次利用快速排序分治中值以後的資料,如果比k大,則排序前面的數字,直到找到k的位置。下面給出c 實現的 include inc...
陣列中第K小的數字
題目描述 給定兩個整型陣列a和b。我們將a和b中的元素兩兩相加可以得到陣列c。譬如a為 1,2 b為 3,4 那麼由a和b中的元素兩兩相加得到的陣列c為 4,5,5,6 現在給你陣列a和b,求由a和b兩兩相加得到的陣列c中,第k小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...