Skip to content

Latest commit

 

History

History
63 lines (52 loc) · 1.34 KB

妮可.md

File metadata and controls

63 lines (52 loc) · 1.34 KB
package sy181214;

import java.util.PriorityQueue;

/**
 * @author suyuan
 * 
 在未排序的数组中找到第 k 个最大的元素。
 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
 */
public class leetcode_215数组中的第K个最大元素
{

	public static void main(String[] args)
	{
		int [] input=new int[]{4,5,1,6,2,7,3,2,5,6};
		System.out.println(findKthLargest(input, 4));

	}
	
	 public static int findKthLargest(int[] nums, int k) 
	 {
	        int len=nums.length;
	        if(k>len || k==0)
	        	return 0;
	        //小顶堆
	        PriorityQueue<Integer> que=new PriorityQueue<Integer>(k);
	        for(int i=0;i<len;i++)
	        {
//	        	if (que.size()!=k)
//				{
//					que.add(nums[i]);
//				}
//	        	//比堆顶大,进堆
//	        	else if(que.peek()<nums[i])
//	        	{
//	        		que.poll();
//	        		que.add(nums[i]);
//	        	}
	        	
	        	que.add(nums[i]);
	        	//小顶堆的堆顶一定是最小的,poll出去的一定是最小的
	        	if(que.size()>k)
	        		que.poll();
	        }
	        return que.peek();
	 }

}