解法

堆的使用方法 生成堆和调整堆
是最大堆还是最小堆

代码

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;
    }
}