提交 dbf64f2e 编写于 作者: C CyC2018

auto commit

上级 bd8b6bfb
...@@ -1779,46 +1779,49 @@ public int MoreThanHalfNum_Solution(int[] nums) { ...@@ -1779,46 +1779,49 @@ public int MoreThanHalfNum_Solution(int[] nums) {
找到第 K 个元素之后,就可以再遍历一次数组,所有小于等于该元素的数组元素都是最小的 K 个数。 找到第 K 个元素之后,就可以再遍历一次数组,所有小于等于该元素的数组元素都是最小的 K 个数。
```java ```java
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { public ArrayList<Integer> GetLeastNumbers_Solution(int[] nums, int k) {
ArrayList<Integer> res = new ArrayList<>(); ArrayList<Integer> ret = new ArrayList<>();
if (k > input.length || k <= 0) return res; if (k > nums.length || k <= 0)
findKthSmallest(input, k - 1); return ret;
for (int i = 0; i < k; i++) { int kthSmallest = findKthSmallest(nums, k - 1);
res.add(input[i]); // findKthSmallest 会让改变数组,使得前 k 个数都是最小的 k 个数
} for (int i = 0; i < k; i++)
return res; ret.add(nums[i]);
} return ret;
}
private void findKthSmallest(int[] nums, int k) { public int findKthSmallest(int[] nums, int k) {
int l = 0, h = nums.length - 1; int l = 0, h = nums.length - 1;
while (l < h) { while (l < h) {
int j = paration(nums, l, h); int j = partition(nums, l, h);
if (j == k) break; if (j == k)
else if (j > k) h = j - 1; break;
else l = j + 1; if (j > k)
} h = j - 1;
else
l = j + 1;
} }
return nums[k];
}
private int paration(int[] nums, int l, int h) { private int partition(int[] nums, int l, int h) {
//nums[l+1,i] nums[j,h] int i = l, j = h + 1;
int i = l, j = h + 1; while (true) {
while (true) { while (i < h && nums[++i] < nums[l]) ;
while (i < h && nums[++i] < nums[l]) ; while (j > l && nums[l] < nums[--j]) ;
while (j > l + 1 && nums[--j] > nums[l]) ; if (i >= j)
if (i >= j) break; break;
swap(nums, i, j); swap(nums, i, j);
}
swap(nums, l, j);
return j;
} }
swap(nums, l, j);
return j;
}
private void swap(int[] nums, int i, int j) { private void swap(int[] nums, int i, int j) {
int t = nums[i]; int t = nums[i];
nums[i] = nums[j]; nums[i] = nums[j];
nums[j] = t; nums[j] = t;
} }
``` ```
### 大小为 K 的最小堆 ### 大小为 K 的最小堆
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册