H 指数
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。
如果 h 有多种可能的值,h 指数 是其中最大的那个。
https://leetcode.cn/problems/h-index/description/
- 数组排序
- h <=Math.min(数组长度, 数组中最大值),降序遍历h(max)
- 或二分法:h指数可能值【1, Math.min(数组长度, 数组中最大值)】,二分查找满足条件的最大值。
- stream流过滤后计数
/* * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved. */packagecom.huawei.prac;importjava.util.Arrays;classSolutionNd{publicstaticvoidmain(String[]args){int[]citations={3,0,6,1,5};int[]citations1={100};System.out.println(hIndex(citations));System.out.println(hIndex(citations1));}/** * 274. H 指数[二分查找 || 排序] * * @param citations citations[i] 表示研究者的第 i 篇论文被引用的次数 * @return (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次 */classSolution{publicinthIndex(int[]citations){Arrays.sort(citations);intmaxH=Math.min(citations[citations.length-1],citations.length);intresult=maxH;// 0 1 3 5 6for(;result>0;result--){intresultTmp=result;intrightH=(int)Arrays.stream(citations).filter(num->num>=resultTmp).count();intleftH=(int)Arrays.stream(citations).filter(num->num<resultTmp).count();if(rightH>=result){returnresult;}}returnresult;}}