2024/9/19 Hot100 Heap 昨日堆
This commit is contained in:
parent
8e4d8d1ddd
commit
dd6ea6ae2f
|
@ -0,0 +1,68 @@
|
||||||
|
package com.cool.hot100.heap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA.
|
||||||
|
*
|
||||||
|
* @Author: Cool
|
||||||
|
* @Date: 2024/09/19/11:11
|
||||||
|
* DayNumber 1
|
||||||
|
* Hard 2
|
||||||
|
* Level ?
|
||||||
|
*/
|
||||||
|
public class Num215 {
|
||||||
|
/**
|
||||||
|
* 桶排序
|
||||||
|
*
|
||||||
|
* @param nums
|
||||||
|
* @param k
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int findKthLargest(int[] nums, int k) {
|
||||||
|
int[] buckets = new int[20001];
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
buckets[nums[i] + 10000]++;
|
||||||
|
}
|
||||||
|
for (int i = 20000; i >= 0; i--) {
|
||||||
|
k = k - buckets[i];
|
||||||
|
if (k <= 0) {
|
||||||
|
return i - 10000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 快速排序,思路参考双路快速排序
|
||||||
|
*
|
||||||
|
* @param nums
|
||||||
|
* @param k
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int findKthLargest1(int[] nums, int k) {
|
||||||
|
return quickSearch(nums, 0, nums.length - 1, nums.length - k);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int quickSearch(int[] nums, int left, int right, int k) {
|
||||||
|
if (left == right)
|
||||||
|
return nums[k];
|
||||||
|
int num = nums[left], i = left - 1, j = right + 1;
|
||||||
|
while (i < j) {
|
||||||
|
do
|
||||||
|
i++;
|
||||||
|
while (nums[i] < num);
|
||||||
|
do
|
||||||
|
j--;
|
||||||
|
while (nums[j] > num);
|
||||||
|
if (i < j) {
|
||||||
|
int temp = nums[i];
|
||||||
|
nums[i] = nums[j];
|
||||||
|
nums[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (k <= j) {
|
||||||
|
return quickSearch(nums, left, j, k);
|
||||||
|
} else {
|
||||||
|
return quickSearch(nums, j + 1, right, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue