最小的K個數

2021-10-04 03:43:08 字數 1112 閱讀 7227

題目描述

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,

//1,先排序;2,氣泡排序3,堆排序???;4,利用treeset排序

/**基於堆排序演算法,構建最大堆。時間複雜度為o(nlogk)

*如果用快速排序,時間複雜度為o(nlogn);

*如果用氣泡排序,時間複雜度為o(n*k)

*/public

class 最小k的個數 })

;for

(int i =

0; i < input.length; i++

)else

if(maxheap.

peek()

>input[i])}

iterator

it = maxheap.

iterator()

;while

(it.

hasnext()

)return result;}}

public

class 最小的k個數

return list;

}public arraylist

getleastnumbers_solution2

(int

input,

int k)

for(

int i =

0; i < k; i++)}

al.add(input[input.length - i -1]

);}return al;

}public arraylist

getleastnumbers_solution3

(int

input,

int k)

treeset

set =

newtreeset

<

>()

;for

(int aninput : input)

return

newarraylist

<

>

(set.

subset(0

, k +1)

);}}

最小的K個數

問題描述 給定的n個整數,計算其中最小的k個數。最直觀的解法莫過於將n個數按公升序排列後輸出前k個。但是就效率來看,這種方法並不是最理想的。一種改進方法是借助快速排序中對陣列的劃分,以第k個元素對陣列進行劃分,使得比第k個數字小的數字都在其左邊,比其大的數字都在它的右邊。void swap int ...

最小的K個數

從 陣列中出現次數超過一半的數字 得到啟發,同樣可以基於partition函式來解決。一 o n 演算法 void getleastnumbers int input,int n,int output,int k else for int i 0 i k i output i input i 二 o...

最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,如果不讓使用sort的話,自己實現乙個,或者依次選取最小的 class solution public vectorgetleastnumbers solution vectori...