leetcode274H指数

思路

其实就是找一个数组的h,h的定义是:h个大于等于h的元素,h越大越好

将数组从大到小排序,只需要判断index+1和citations[index]的值
index+1 代表的是目前有多少个元素,对于下面的例子

citations = [3,0,6,1,5]
排序后citations = [6,5,3,1,0]
从前往后找
citations[0]为6,同时表明大于等于6的文章只有index+1=1篇(因为逆排序过了),这是不符合要求的(如果h=6,应该至少有六篇文章,且每篇文章引用量大于等于6),而且目前是h找大了,应该往小找,所以index++,

citations[1]为5.也不满足条件,因为引用大于等于5的只有index+1=2篇

citations[2] =3 满足条件,
这个时候还需要继续(为什么需要继续,考虑例子:100,99,98,97 正确答案应该是4,所以index应该尽量大)
citations[3] =1,
但是因为citations[index] < index+1;
即4篇文章,但是不是4篇引用量都大于4

对于例子100,99,98,97,有4篇文章引用量都大于4

这个感觉可以用二分查找,但是边界不会处理,下面是我的笨代码:

代码

public static int hIndex(int[] citations) {
        List<Integer> citationList = new ArrayList<>(IntStream.of(citations)
                .boxed()
                .toList());
        citationList.sort(Comparator.reverseOrder());

        for (int i =0;i<citationList.size();i++){
            if (citationList.get(i)<i+1){
                return i;
            }
        }
        return citationList.size();

    }

看了别的题解,可以不排序
https://leetcode.cn/problems/h-index/solutions/869042/h-zhi-shu-by-leetcode-solution-fnhl/?envType=study-plan-v2&envId=top-interview-150

时间复杂度O(n)
空间复杂度O(n)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值