解法
堆的使用方法 生成堆和调整堆
是最大堆还是最小堆
代码
class Solution { public int findKthLargest(int[] nums, int k) { int[] heap=new int[k]; for(int i=0;i<k;i++) { heap[i]=nums[i]; } //形成小顶堆 for(int i=0;i<k;i++) { createSmallHeap(heap,i); } System.out.println(Arrays.toString(heap)); for(int i=k;i<nums.length;i++) { if(nums[i]>heap[0]) { heap[0]=nums[i]; //调整 updateHeap(heap); } } return heap[0]; } //小顶堆 public void createSmallHeap(int[] heap,int i) { while(heap[i]<heap[(i-1)/2]) { swap(heap,i,(i-1)/2); i=(i-1)/2; } } public void updateHeap(int[] heap) { int cur=0; while(cur<heap.length) { int left=cur*2+1; if(left<heap.length) { int smallest=heap[cur]<heap[left]?cur:left; smallest=left+1<heap.length&&heap[smallest]>heap[left+1]?left+1:smallest; if(smallest==cur) break; swap(heap,smallest,cur); cur=smallest; }else { break; } } } public void swap(int[] arr,int i,int j) { int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } }