来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/h-index-ii

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目的大意是这样的
有一个升序排列的数组citations,返回citations的h指数 h指数:在数组citations中,至少有h个元素,他们的值大于等于h 提示:如果h有多种可能的值h指数是其中最大的那个。

二分思路

二分h指数
简要证明h指数具有二分性质
如果数组citations不存在一个h指数i,那么一定不会存在一个h指数i+1,i+2,...,i+k(k>=1)
举个例子
假设在一组递增序列中,没有两个大于等于2的元素,那么大于等于3的元素最多只会有一个
由此得出h指数具有二分性质

二分h指数代码如下

class Solution {
public: bool check(int h,vector<int>& citations){
int len = -1;
for(int i=0;i<citations.size();i++){
if(citations[i]>=h && citations.size()-i == h){
// 得到有len-i+1篇论文至少引用了h次
len = citations.size()-i;
break;
}
}
if(len!=-1)return 1;
else return 0;
} int hIndex(vector<int>& citations) {
int l=1,r=citations.size(),mid; while(l<r){
mid = (l+r+1)/2;
if(check(mid,citations))l=mid;
else r=mid-1;
}
if(check(l,citations))return l;
else return 0;
}
};
因为数组citations是单调递增的,所以check函数也可以用二分优化

最终优化如下

class Solution {
public: bool check(int h,vector<int>& citations){
int l=0,r=citations.size()-1,mid; while(l<r){
mid = (l+r)/2;
if(citations[mid]>=h)r=mid;
else l=mid+1;
} if(citations[l]>=h && citations.size()-l>=h)return 1;
else return 0;
} int hIndex(vector<int>& citations) {
int l=1,r=citations.size(),mid; while(l<r){
mid = (l+r+1)/2;
if(check(mid,citations))l=mid;
else r=mid-1;
}
if(check(l,citations))return l;
else return 0;
}
};
这里需要注意一点,如果citations.size()-l>=h说明一定有h个元素大于等于h

最新文章

  1. Linux 知识框架
  2. python 自动化测试资料
  3. [视频]ARM告诉你物联网怎么玩,mbed 6LoWPan demo
  4. Giraph之SSSP(shortest path)单机伪分布运行成功
  5. nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
  6. (java)从零开始之--装饰者设计模式
  7. c#里listview里如何获取点击的是哪一列
  8. FPGA学习:VHDL设计灵活性&不同设计思路比较
  9. mysql 查询近7天数据,缺失补0
  10. [Leetcode 78]求子集 Subset
  11. ::WritePrivateProfileString()的用法,以及GetPrivateProfileString的用法注意事项
  12. Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)
  13. 【开源】EasyFlash 新年发布 V4.0 beta 版,完全重写(转)
  14. mysql千万级表关联优化
  15. GIF图片合集(用于网络请求图片用)
  16. 异常:Error:Execution failed for task &#39;:app:compileDebugJavaWithJavac&#39;. &gt; Compilation failed; see the compiler error output for details.
  17. ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存
  18. 在SQLPLUS里显示IP、用户名和实例名
  19. bzoj 3224/Tyvj 1728 普通平衡树(splay)
  20. dt4.0上传图片总是压缩解决办法,为什么我设置了不压缩图片,程序还是压缩呢?

热门文章

  1. java通过socket实现https get 请求网页
  2. 十二张图:从0开始理解对称/非对称加密、CA认证、以及K8S各组件颁发证书原由
  3. 在jupyternotebook中写C/C++
  4. Elasticsearch学习系列二(基础操作)
  5. 开启网易邮箱客户端授权码-POP/SMTP/IMAP
  6. python+requests+yaml实现接口自动化用例(二)---升级版
  7. label问题排查:打不开标注好的图像
  8. sql server 开启一个事务
  9. 聊聊Netty那些事儿之从内核角度看IO模型
  10. JavaScript进阶知识点——函数和对象详解