asp.net企业网站建设,网站解析出问题 邮件收不到了,国办网站建设规范,seo快速排名软件易下拉霸屏给定整数数组 nums 和整数 k#xff0c;请返回数组中第 k 个最大的元素。 请注意#xff0c;你需要找的是数组排序后的第 k 个最大的元素#xff0c;而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2
输出: 5提到数组中最大元素#xff0c;我们往往想到就是先给数组… 给定整数数组 nums 和整数 k请返回数组中第 k 个最大的元素。 请注意你需要找的是数组排序后的第 k 个最大的元素而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2
输出: 5提到数组中最大元素我们往往想到就是先给数组进行排序然后取最大值现在我们按照这个思路写一写代码
首先判断入参是否合法
f (nums null || nums.length 0) {return 0;}
然后对数组进行排序
Arrays.sort(nums);//默认排序方法时双基准快排效率较高
因为我们取的是第k个最大的元素 因为数组的长度是6而k是2我们所需要求的值的索引刚好是4所以我们可以得出我们所需要推出的值是nums.length-k(在做题的过程中如果需要确定关系式的这种情况个人建议还是举出例子然后亲自推导比较好一点) return nums[nums.length - k]; 接下来提到最大值大家还能想到什么方法是不是有种数据结构特能自动的为我们进行数值的排序不错就是优先队列 我们可以先将数组中的元素都往优先队列中塞进去然后poll k次就是我们所需要的值我们直接上代码 public int findKthLargest(int[] nums, int k) {if(numsnull||nums.length0){return 0;}//对比较器进行重写从大到小因为PriorityQueue的默认排序时升序排序PriorityQueueInteger queuenew PriorityQueue((a,b)-{return b -a;});for(int num:nums){queue.offer(num);}int res0;while(k0){resqueue.poll();k--;}return res;}