一:先排序,取前k個數
二:使用容器(multiset)固定k個位,當容器未滿時,可插入;滿時,與容器內最大比較,如果比最大的小,就刪除最大的,插入新元素class
solution
};
#include
#include
#include
using mul=std::multiset<
int, std::greater<
int>>
;using setvit=std::multiset<
int, std::greater<
int>>
::iterator;
void
getlastnumbers
(std::vector<
int>
& arr, mul& leastnumbers, size_t k)
else}}
}int
main()
; mul leastnumbers;
getlastnumbers
(arr, leastnumbers,3)
;for
(auto num : leastnumbers)
std::cin.
get();
return0;
}
面試題40 最小k個數
題目 輸入n個整數,找出其中最小的k個數 思路 1 如果輸入的陣列可以改變,則基於第k個數來調整,是第k個數左邊的數都小於第k個數,右邊的數都大於第k個數 時間複雜度o n 思路1 void printkminnumberbymethod1 int arr,int length,int k int ...
面試題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...