劍指Offer 最小的K個數

2021-07-27 19:45:22 字數 1099 閱讀 3383

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

第一種方法是全排序,先把陣列進行排序,排序後依次輸出最小的4個,時間複雜度為nlogn。

第二種方法是的原理和快速排序有關,是通過快速排序的優化版解題目。快速排序是定義乙個基點(一般是第乙個數字),每次排序後會把陣列中小於基點的放在前面,大於基點的放在後面。(具體的快速排序演算法不說了)

如題目中的乙個基點為4,第一次排序後:3, 2, 1, 4, 6, 7, 5, 8。如果我們需要的k和4的位置相等,就不用繼續排序,因為4之前的都是小於4的。k比4所在的位置大時,只需要排序4之後的數字。k比4所在的位置小時,只需要排序4之前的數字。

(掌握快速排序應該對這個思路很了解,這個最糟糕的情況是nlogn)

public

class solution13

//類似快速排序

private

void

quicksort(int input, int s, int end, arraylistlist,int k)

int temp=input[s];

int i=s,e=end;

//快速排序

while(iwhile(e>i&&temp<=input[e])

input[i++]=input[e];

while(e>i&&temp>=input[i])

input[e]=input[i];

}input[e]=temp;

//如果k==e,說明e之前的都是小於e的,k〉e還需要排序後面的,e〉k要排序前面的

if(e==k)

return;

else

if(e1, end, list, k);

}else

}public

static

void

main(string args) ;

solution13 b = new solution13();

system.out.println(b.getleastnumbers_solution(a,4));

}}

劍指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。附 這只是乙個比較簡單的方法。如果考慮...