find some mistakes
This commit is contained in:
parent
63c24c4c7e
commit
954fbfa468
|
@ -1778,47 +1778,46 @@ public int MoreThanHalfNum_Solution(int[] nums) {
|
||||||
找到第 K 个元素之后,就可以再遍历一次数组,所有小于等于该元素的数组元素都是最小的 K 个数。
|
找到第 K 个元素之后,就可以再遍历一次数组,所有小于等于该元素的数组元素都是最小的 K 个数。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public ArrayList<Integer> GetLeastNumbers_Solution(int[] nums, int k) {
|
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
|
||||||
if (k > nums.length || k <= 0)
|
ArrayList<Integer> res = new ArrayList<>();
|
||||||
return new ArrayList<>();
|
if (k > input.length || k <= 0) return res;
|
||||||
int kthSmallest = findKthSmallest(nums, k - 1);
|
findKthSmallest(input, k - 1);
|
||||||
ArrayList<Integer> ret = new ArrayList<>();
|
for (int i = 0; i < k; i++) {
|
||||||
for (int val : nums)
|
res.add(input[i]);
|
||||||
if (val <= kthSmallest && ret.size() < k)
|
}
|
||||||
ret.add(val);
|
return res;
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int findKthSmallest(int[] nums, int k) {
|
|
||||||
int l = 0, h = nums.length - 1;
|
|
||||||
while (l < h) {
|
|
||||||
int j = partition(nums, l, h);
|
|
||||||
if (j == k)
|
|
||||||
break;
|
|
||||||
if (j > k)
|
|
||||||
h = j - 1;
|
|
||||||
else
|
|
||||||
l = j + 1;
|
|
||||||
}
|
}
|
||||||
return nums[k];
|
|
||||||
}
|
|
||||||
|
|
||||||
private int partition(int[] nums, int l, int h) {
|
private void findKthSmallest(int[] nums, int k) {
|
||||||
int i = l, j = h + 1;
|
int l = 0, h = nums.length - 1;
|
||||||
while (true) {
|
while (l < h) {
|
||||||
while (i < h && nums[++i] < nums[l]) ;
|
int j = paration(nums, l, h);
|
||||||
while (j > l && nums[l] < nums[--j]) ;
|
if (j == k) break;
|
||||||
if (i >= j)
|
else if (j > k) h = j - 1;
|
||||||
break;
|
else l = j + 1;
|
||||||
swap(nums, i, j);
|
}
|
||||||
}
|
}
|
||||||
swap(nums, l, j);
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void swap(int[] nums, int i, int j) {
|
private int paration(int[] nums, int l, int h) {
|
||||||
int t = nums[i]; nums[i] = nums[j]; nums[j] = t;
|
//nums[l+1,i] nums[j,h]
|
||||||
}
|
int i = l, j = h + 1;
|
||||||
|
while (true) {
|
||||||
|
while (i < h && nums[++i] < nums[l]) ;
|
||||||
|
while (j > l + 1 && nums[--j] > nums[l]) ;
|
||||||
|
if (i >= j) break;
|
||||||
|
swap(nums, i, j);
|
||||||
|
}
|
||||||
|
swap(nums, l, j);
|
||||||
|
return j;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void swap(int[] nums, int i, int j) {
|
||||||
|
int t = nums[i];
|
||||||
|
nums[i] = nums[j];
|
||||||
|
nums[j] = t;
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 大小为 K 的最小堆
|
### 大小为 K 的最小堆
|
||||||
|
|
Loading…
Reference in New Issue
Block a user