這個題目的話,單純看題目的名字就知道利用堆可以去解決。但是先講一下另一種思路,就是將所有元素記錄到自己的位置上,這樣元素就會預設的從小到大進行排列,然後就可以找到了。**如下:
public arraylist
getleastnumbers_solution
(int
input,
int k)
int[
] flags =
newint
[max - min+1]
;//找到最大最小值,申請空間存放每個元素相對位置
for(
int num : input)
for(
int i =
0; i < flags.length;
++i)
}return result;
}
當然這種解法空間複雜度比較高,一些特殊的陣列例如最大最小值相差很大的可能造成很多空間的浪費,而且時間複雜度上也並沒有多好,好幾個o(n)。只是想提供一種這樣的思路,即陣列下標可以作為元素的索引。
當然,還是老老實實用堆做一遍比較好
public
class
solution
}for
(int hea : heap)
result.
add(hea)
;return result;
}//對於乙個堆調整,index為當前節點下標,length為截至長度
private
void
siftdown
(int
heap,
int index,
int length)
else}}
private
void
swap
(int
heap,
int index1,
int index2)
}
劍指offer 最小k個數
1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...
劍指offer 最小的K個數
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 4 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解析 基於插入排序的思想可以想到使用乙個長度為k的排序陣列儲存最小的k個元素,複雜度o nk 基於...
《劍指offer》最小的K個數
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入給整數陣列,和k 找出其中最小的k個數 class solution 1 先用插入排序對陣列中數進行排序。2 取出有序陣列中最小的kge。附 這只是乙個比較簡單的方法。如果考慮...