1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| class Solution40 { public int[] getLeastNumbers(int[] arr, int k) { if (k <= 0 || arr.length == 0) { return new int[0]; } int[] ans = new int[k]; Arrays.sort(arr); for (int i = 0; i < k; i++) { ans[i] = arr[i]; } return ans; }
public int[] getLeastNumbers2(int[] arr, int k) { if (k <= 0 || arr.length == 0) { return new int[0]; }
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); for (int i = 0; i < k; i++) { queue.offer(arr[i]); } for (int i = k; i < arr.length; i++) { if (arr[i] < queue.peek()) { queue.poll(); queue.offer(arr[i]); } } int[] ans = new int[k]; for (int i = 0; i < k; i++) { ans[i] = queue.poll(); } return ans; }
public int[] getLeastNumbers3(int[] arr, int k) { if (k <= 0 || arr.length == 0 || k > arr.length) { return new int[0]; } quickSort(arr, 0, arr.length - 1, k - 1); int[] ans = new int[k]; for (int i = 0; i < k; i++) { ans[i] = arr[i]; } return ans; }
private void quickSort(int[] arr, int left, int right, int k) { if (left >= right) { return; } int index = quick(arr, left, right); System.out.println(index); if (k == index) { return; } else if (index < k) { quickSort(arr, index + 1, right, k); } else { quickSort(arr, left, index - 1, k); } }
private int quick(int[] arr, int left, int right) { int key = arr[left]; int indexLeft = left; while (left < right) { while (left < right && arr[right] >= key) { right--; } while (left < right && arr[left] <= key) { left++; } if (left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } } arr[indexLeft] = arr[left]; arr[left] = key; return left; } }
|