多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DeepSeek LeetCode 275. H 指数 II Java实现

DeepSeek    LeetCode 275. H 指数 II Java实现 LeetCode 275. H 指数 II Java 实现与 274 的区别· 274citations 未排序可以排序或计数O(n log n) 或 O(n)。· 275citations 已经按升序排列要求时间复杂度 O(log n)因此使用二分查找。二分思路数组升序设 n citations.length。对于下标 mid· 从 mid 到末尾共有 n - mid 篇论文· 因为数组升序所以这 n - mid 篇论文的引用数都 ≥ citations[mid]· 如果 citations[mid] n - mid说明至少有 n - mid 篇论文引用数 ≥ n - mid即 H 指数至少为 n - mid· 为了找最大的 H 指数我们需要让 mid 尽量小因此满足条件时继续向左二分。最终 left 是第一个满足条件的位置答案就是 n - left。Java 代码classSolution{publicinthIndex(int[]citations){intncitations.length;intleft0,rightn-1;while(leftright){intmidleft(right-left)/2;// 从 mid 到末尾共有 n - mid 篇论文if(citations[mid]n-mid){// 满足条件尝试找更小的 mid以获得更大的 hrightmid-1;}else{// 不满足需要向右找leftmid1;}}// left 是第一个满足条件的位置h n - leftreturnn-left;}}示例输入citations [0,1,3,5,6]n 5步骤 left right mid citations[mid] n - mid 判断1 0 4 2 3 3 3 3right 12 0 1 0 0 5 0 5 否left 13 1 1 1 1 4 1 4 否left 2结束 2 1 返回 5 - 2 3输出3复杂度分析指标 复杂度时间复杂度 O(log n)空间复杂度 O(1)关键点输入已经升序不要再次排序。n - mid 表示从 mid 到末尾的论文数量即当前候选的 H 指数。二分找的是第一个满足 citations[mid] n - mid 的位置这样得到的 n - left 就是最大的 H 指数。边界情况空数组可返回 0全为 0 返回 0[100] 返回 1。
返回列表