diff --git a/src/main/java/com/cool/hot100/heap/Num215.java b/src/main/java/com/cool/hot100/heap/Num215.java index 78b3290..312f55a 100644 --- a/src/main/java/com/cool/hot100/heap/Num215.java +++ b/src/main/java/com/cool/hot100/heap/Num215.java @@ -65,4 +65,40 @@ public class Num215 { 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(rightnums[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; + } }