public int[] getLeastNumbers(int[] arr, int k) { //最小的k个数 Arrays.sort(arr); return Arrays.copyOfRange(arr,0,k); }
public int[] getLeastNumbers(int[] arr, int k) { int n = arr.length; int[] res = new int[k]; int t = k-1; //冒泡排序 for(int i = 0;i<k;i++){ int j = 1; for(;j<n-i;j++){ if(arr[j]>arr[j-1]){ int temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } res[t--] = arr[j-1]; } return res; }
为啥???????????
public int[] getLeastNumbers(int[] arr, int k) { //比第k个数字小的数字都位于左边,比第k个数字大的数都位于右边 int len = arr.length; int i = 0,j = len-1; while(i<=k-1 && j>=k-1){ boolean b = false; while (i<k-1){ if(arr[i]>arr[k-1]){ swap(i,k-1,arr); b = true; } i++; } while(j>k-1){ if(arr[j]<arr[k-1]){ swap(j,k-1,arr); b = true; } j--; } if(!b){ return Arrays.copyOfRange(arr,0,k); } i = 0; j = len-1; } return Arrays.copyOfRange(arr,0,k); } private void swap(int i, int small, int[] nums) { int temp = nums[i]; nums[i] = nums[small]; nums[small] = temp; }