275. H 指数 II--Leetcode_二分
2024-09-18 04:46:21
来源:力扣(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
最新文章
- Linux 知识框架
- python 自动化测试资料
- [视频]ARM告诉你物联网怎么玩,mbed 6LoWPan demo
- Giraph之SSSP(shortest path)单机伪分布运行成功
- nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
- (java)从零开始之--装饰者设计模式
- c#里listview里如何获取点击的是哪一列
- FPGA学习:VHDL设计灵活性&不同设计思路比较
- mysql 查询近7天数据,缺失补0
- [Leetcode 78]求子集 Subset
- ::WritePrivateProfileString()的用法,以及GetPrivateProfileString的用法注意事项
- Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)
- 【开源】EasyFlash 新年发布 V4.0 beta 版,完全重写(转)
- mysql千万级表关联优化
- GIF图片合集(用于网络请求图片用)
- 异常:Error:Execution failed for task &#39;:app:compileDebugJavaWithJavac&#39;. >; Compilation failed; see the compiler error output for details.
- ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存
- 在SQLPLUS里显示IP、用户名和实例名
- bzoj 3224/Tyvj 1728 普通平衡树(splay)
- dt4.0上传图片总是压缩解决办法,为什么我设置了不压缩图片,程序还是压缩呢?
热门文章
- java通过socket实现https get 请求网页
- 十二张图:从0开始理解对称/非对称加密、CA认证、以及K8S各组件颁发证书原由
- 在jupyternotebook中写C/C++
- Elasticsearch学习系列二(基础操作)
- 开启网易邮箱客户端授权码-POP/SMTP/IMAP
- python+requests+yaml实现接口自动化用例(二)---升级版
- label问题排查:打不开标注好的图像
- sql server 开启一个事务
- 聊聊Netty那些事儿之从内核角度看IO模型
- JavaScript进阶知识点——函数和对象详解