劍指offer最小的k個數
阿新 • • 發佈:2018-12-10
題目描述: 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。
思路: 最直觀的思路就是採用一個長度為k的陣列nums,保證數組裡邊的數有序,每訪問輸入陣列input的一個節點,將其與nums陣列的值最大的元素即nums[nums.length - 1]進行比較,如果input節點更小,則替換。 本題也要注意各種異常的排除,包括: 輸入陣列為空,輸入的k值為0,k值大於陣列長度。
參考程式碼:
import java.util.ArrayList; import java.util.Arrays; public class MinKNumbers { public static ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { if (input == null || input.length < k || k == 0) { return new ArrayList<Integer>(); } int[] num = new int[k]; for (int p = 0; p < k; p++) { num[p] = input[p]; } Arrays.sort(num); System.out.println(Arrays.toString(num)); for (int i = k - 1; i < input.length; i++) { if (input[i] < num[k - 1]) { num[k - 1] = input[i]; Arrays.sort(num); } } ArrayList<Integer> aList = new ArrayList<>(); for (int j = 0; j < k; j++) { aList.add(num[j]); } return aList; } public static void main(String[] args) { int[] input = { 4, 5, 1, 6, 2, 7, 3, 8 }; int k = 8; ArrayList<Integer> arrayList = GetLeastNumbers_Solution(input, k); for(int i: arrayList) { System.out.print(i+" "); } } }