leetcode 274.H指数
Posted chaha123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 274.H指数相关的知识,希望对你有一定的参考价值。
题目:
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。
返回滑动窗口最大值。
示例:
输入: nums =[1,3,-1,-3,5,3,6,7]
, 和 k = 3 输出:[3,3,5,5,6,7] 解释:
滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7
注意:
你可以假设 k 总是有效的,1 ≤ k ≤ 输入数组的大小,且输入数组不为空。
进阶:
你能在线性时间复杂度内解决此题吗?
分析:
我个人的想法是二分法,进阶中的线性时间复杂度O(n)我想不到,二分的上下界限很容易找,被引用次数最低是0,而最高有citations.length个文章被引用。
所以直接进行二分查找,记录下来引用次数合格的文章和不合格的文章,比较他们是否符合,再调整上下界就可以了。
代码:
1 class Solution { 2 public int hIndex(int[] citations) { 3 int len=citations.length; 4 int max=citations.length; 5 int min=0; 6 int res=0; 7 while(min<=max) { 8 int mid=(max+min)/2; 9 int l=0; 10 int r=0; 11 for(int n=0;n<len;++n) 12 if(citations[n]>=mid) 13 r++; 14 else 15 l++; 16 if(r>=mid&&l<=len-mid) { 17 if(mid>res) 18 res=mid; 19 min=mid+1; 20 }else 21 max=mid-1; 22 } 23 return res; 24 } 25 }
以上是关于leetcode 274.H指数的主要内容,如果未能解决你的问题,请参考以下文章