2024/9/20 LeetCode Hot100 堆第一题,最大堆解法
This commit is contained in:
parent
dd6ea6ae2f
commit
361bd0ba38
|
@ -65,4 +65,40 @@ public class Num215 {
|
||||||
return quickSearch(nums, j + 1, right, k);
|
return quickSearch(nums, j + 1, right, k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public int findKthLargest2(int[] nums, int k) {
|
||||||
|
int heapSize=nums.length;
|
||||||
|
buildMaxHeap(nums,heapSize);
|
||||||
|
for(int i=nums.length-1;i>nums.length-k;i--){
|
||||||
|
swap(nums,0,i);
|
||||||
|
--heapSize;
|
||||||
|
maxHeapify(nums,0,heapSize);
|
||||||
|
}
|
||||||
|
return nums[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buildMaxHeap(int[]nums,int heapSize){
|
||||||
|
for(int i=heapSize/2;i>=0;i--){
|
||||||
|
maxHeapify(nums,i,heapSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void maxHeapify(int[] nums, int i, int heapSize) {
|
||||||
|
int left = 2 * i + 1, right = 2 * i + 2, largest = i;
|
||||||
|
if (left < heapSize && nums[left] > nums[largest]) {
|
||||||
|
largest=left;
|
||||||
|
}
|
||||||
|
if(right<heapSize&&nums[right]>nums[largest]){
|
||||||
|
largest=right;
|
||||||
|
}
|
||||||
|
if(largest!=i){
|
||||||
|
swap(nums,largest,i);
|
||||||
|
maxHeapify(nums,largest,heapSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void swap(int[] nums, int i, int j) {
|
||||||
|
int temp = nums[i];
|
||||||
|
nums[i] = nums[j];
|
||||||
|
nums[j] = temp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue