面試題40 最小k個數

2021-10-06 18:26:58 字數 1115 閱讀 2767

題目:輸入n個整數,找出其中最小的k個數

思路:

1、如果輸入的陣列可以改變,則基於第k個數來調整,是第k個數左邊的數都小於第k個數,右邊的數都大於第k個數;時間複雜度o(n)

//思路1

void

printkminnumberbymethod1

(int arr,

int length,

int k)

int start =0;

int end = length -1;

int index =

partition

(arr, length, start, end)

;while

(index != k -1)

else

}for

(int i =

0; i < k; i++

) cout << endl;

}

2、如果輸入的資料不可以改變,且有很多資料時,可以用最大堆來裝k個數,當沒裝滿時,往裡面裝數;當滿了時候,取出最大堆中最大的數和下乙個數比較,如果下乙個數比最大堆最大數小,就更新最大堆,否則繼續;時間複雜度o(nlogk)

//思路2

void

printkminnumberbymethod2

(int arr,

int length,

int k)

multiset<

int, greater<

int>

> kminset;

for(

int i =

0; i < length; i++

)else}}

//最大堆

multiset<

int, greater<

int>

>

::iterator itr = kminset.

begin()

;for

(; itr != kminset.

end(

); itr++

) cout << endl;

}

面試題40 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4 5 1 6 2 7 3 8 這8個數字,則最小的4個數字是1 2 3 4。分析 這道題最簡單的思路莫過於把輸入的n個整數排序,排序之後位於最前面的k個數就是最小的k個數,這種思路的時間按複雜度是o nlogn 2.1 方法一 時間複雜度為o n 的演算...

面試題40 最小的K個數

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法一 不修改原陣列,時間複雜度o nlgk class solution if result k 1 input i result k 1 input i return...

面試題40 最小的k個數!

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法一 堆排序 class solution public vectorgetleastnumbers solution vectorinput,int k return r...