解法
堆的使用方法 生成堆和调整堆
是最大堆还是最小堆
代码
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;
}
}
京公网安备 11010502036488号