1. 题目来源
链接:274. H 指数
2. 题目解析
阅读理解。
从大到小枚举每个数,并 从大到小枚举 h
,即从 n
开始枚举 h
。每次判断是否有 h
个数是大于等于 h
的即可,等价于判断降序数组中的第 h
个数是否大于等于 h
即可。另一个条件,不需要处理,后面的 N-h
个数自然是小于等于 h
的,因为数组是降序的。找到直接返回即可,找不到返回 0。
代码很精巧,思维上稍有点饶。
时间复杂度:
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
空间复杂度:
O
(
1
)
O(1)
O(1)
代码很精巧。
class Solution {
public:
int hIndex(vector<int>& c) {
sort(c.begin(), c.end(), greater<int>());
for (int h = c.size(); h; h -- )
if (c[h - 1] >= h)
return h;
return 0; // [0] 返回 0
}
};