2023-10-30每日一题
一、题目编号
275. H 指数 II
二、题目链接
三、题目描述
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。
请你设计并实现对数时间复杂度的算法解决此问题。
示例 1:
示例 2:
提示:
- n == citations.length
- 1 <= n <= 105
- 0 <= citations[i] <= 1000
- citations 按 升序排列
四、解题代码
class Solution {
public:
int hIndex(vector<int>& citations) {
int left = 0;
int right = citations.size()-1;
int n = right;
int ans = 0;
while(left <= right){
int mid = (left+right)>>1;
if((n-mid)+1 == citations[mid]){
return n-mid+1;
} else if((n-mid)+1 > citations[mid]){
left = left+1;
} else{
ans = max(ans, min(n-mid+1, citations[mid]));
right = right-1;
}
}
return ans;
}
};
五、解题思路
(1) 二分搜索。