题目链接
不想戳的看下图
解题思路
根据题目的意思,找一个最大的数值t,这个数字满足在我们的数组里大于等于t的至少有t个,如果满足这个条件,t就是一个合法的数值,然后我们需要找到最大的那个t。
于是我们设置外层循环为引用的次数,从1到数组元素中的最大值结束,用i表示。然后我们设置内层循环为数组元素的遍历。
每次进入内层循环之前,我们都会设置一个计数器为count = 0,然后我们遍历数组,如果数组元素满足大于等于i,count就加1,然后接着对count进行判断,如果此时的count = i并且count满足大于等于max(max初始化为0),就重新赋值max = count。
遍历结束后,max即为结果。
代码如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
int max = 0;
for(int i=0;i<citations.size();i++){
if(citations[i] > 0){
max = 1;
break;
}
}
int key = *max_element(citations.begin(),citations.end());
for(int i=1;i<=key;i++){
int count = 0;
for(int j=0;j<citations.size();j++){
if(citations[j] >= i){
count++;
}
if(count == i && count > max){
max = count;
}
}
}
return max;
}
};
小结
每日一题好!
力扣好!
建议不知如何刷题的同学们,去做做力扣里面的每日一题。本人受益匪浅!
骗赞