【每日一题Day363】LC275H 指数Ⅱ | 二分答案

H 指数Ⅱ【LC275】

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。

h 指数的定义:h 代表"高引用次数"(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。

请你设计并实现对数时间复杂度的算法解决此问题。

同昨天的二分 区别不用自己排序了

  • 思路

    • 二段性:存在最大值y使,少于等于y的数值一定满足条件;大于y的数值一定不满足条件
    • 二分答案y
      • 引用次数大于等于y的论文数目大于等于y,那么向右搜索获得更大的y
      • 引用次数大于等于y的论文数目小于y,那么向左搜索获得更大的y
    • check:排序后可以快速算出引用次数大于等于y的论文数目
  • 实现

    java 复制代码
    class Solution {
        public int hIndex(int[] citations) {
            
            int n = citations.length;
           // Arrays.sort(citations);
            int l = 1, r = n;
            int res = 0;
            while (l <= r){
                int mid =(l + r) >> 1;
                if (check(citations, mid) >= mid){
                    res = Math.max(res, mid);
                    l = mid + 1;            
                }else{
                     r = mid - 1;
                }
            }
            return res;
        }
        public int check(int[] citations, int target){
            int n = citations.length;
            int l = 0, r = n - 1;
            while (l <= r){
                int mid = l + r >> 1;
                if (citations[mid] < target){
                    l = mid + 1;
                }else{
                    r = mid - 1;
                }
            }
            // l为第一个符合的下标
            return n - l;// 大于等于target的引用次数的数目
    
        }
    }
    • 复杂度
      • 时间复杂度: O ( n l o g m ) O(nlogm) O(nlogm), n n n是数组的长度,m是二分查找的上界。二分查找的时间复杂度是 O ( l o g m ) O(logm) O(logm),每次判断需要的时间复杂度为 O ( n ) O(n) O(n)
      • 空间复杂度: O ( log ⁡ n ) O(\log n) O(logn)
相关推荐
CoderYanger7 小时前
递归、搜索与回溯-综合练习:19.目标和
java·算法·leetcode·1024程序员节
吃着火锅x唱着歌9 小时前
LeetCode 3185.构成整天的下标对数目II
算法·leetcode·职场和发展
资深web全栈开发9 小时前
LeetCode 1590:使数组和能被 p 整除(前缀和 + 哈希表优化)
算法·leetcode·前缀和·算法优化·哈希表·go 语言·取模运算
CoderYanger9 小时前
递归、搜索与回溯-综合练习:27.黄金矿工
java·算法·leetcode·深度优先·1024程序员节
sin_hielo10 小时前
leetcode 1590
数据结构·算法·leetcode
吃着火锅x唱着歌10 小时前
LeetCode 2748.美丽下标对的数目
数据结构·算法·leetcode
做怪小疯子10 小时前
LeetCode 热题 100——二叉树——二叉树的中序遍历
算法·leetcode·职场和发展
wyiyiyi11 小时前
【数据结构+算法】非递归遍历二叉树的理解
大数据·数据结构·笔记·算法·leetcode·数据分析
2401_8933266211 小时前
力扣1971.寻找图中是否存在路径
算法·leetcode·职场和发展