当前位置: 首页 > news >正文

Leetcode.274 H 指数

题目链接

Leetcode.274 H 指数 mid

题目描述

给你一个整数数组 c i t a t i o n s citations citations ,其中 c i t a t i o n s [ i ] citations[i] citations[i] 表示研究者的第 i i i 篇论文被引用的次数。计算并返回该研究者的 h h h 指数

根据维基百科上 h h h 指数的定义: h h h 代表“高引用次数” ,一名科研人员的 h h h 指数 是指他(她)至少发表了 h h h 篇论文,并且每篇论文 至少 被引用 h h h 次。如果 h h h 有多种可能的值, h h h 指数 是其中最大的那个。

示例 1:

输入:citations = [3,0,6,1,5]
输出:3
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。

示例 2:

输入:citations = [1,3,1]
输出:1

提示:
  • n = c i t a t i o n s . l e n g t h n = citations.length n=citations.length
  • 1 ≤ n ≤ 5000 1 \leq n \leq 5000 1n5000
  • 0 ≤ c i t a t i o n s [ i ] ≤ 1000 0 \leq citations[i] \leq 1000 0citations[i]1000

解法:二分

我们定义 c h e c k ( k ) check(k) check(k),表示 c i t a t i o n s citations citations 至少存在 k k k 篇论文被引用超过 k k k 次,即 c i t a t i o n s citations citations 是否满足 k k k 指数

我们采用 二分 解决,初始时 :

l = 0 , r = n l = 0 , r = n l=0,r=n

m i d = ( l + r ) / 2 mid = (l + r) / 2 mid=(l+r)/2

如果 c h e c k ( m i d ) check(mid) check(mid) 成立,即满足 m i d mid mid 指数,说明 m i d mid mid 可能就是答案,即 l = m i d l = mid l=mid

否则,不满足 m i d mid mid 指数,说明 m i d mid mid 太大了,故 r = m i d − 1 r = mid - 1 r=mid1

时间复杂度: O ( n × l o g n ) O(n \times logn) O(n×logn)

C++代码:

class Solution {
public:int hIndex(vector<int>& citations) {int n = citations.size();int l = 0 , r = n;auto check = [&](int k) ->int{int cnt = 0;for(auto x:citations){if(x >= k) cnt++;}return cnt >= k;};while(l < r){int mid = (l + r + 1) >> 1;if(check(mid)) l = mid;else r = mid - 1;}return l;}
};

相关文章:

  • 如何使用python快速修改Excel表单中的大量数据
  • 【OJ for Divide and Conquer】OJ题解
  • Mysql第四篇---数据库索引优化与查询优化
  • 基于PHP的仓库库存管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 主定理(一般式)
  • spring框架回顾
  • 05、Python -- 爬取ts文件格式视频思路
  • 高三高考免费试卷真题押题知识点合集
  • Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)
  • 多个相同地址的I2C设备,如何挂载在同一条总线上
  • Ansible脚本进阶---playbook
  • Web入门笔记
  • UE5使用Dash插件实现程序化地形场景制作
  • 网关概念及java项目中用使用网关场景
  • Ubuntu系统编译调试QGIS源码保姆级教程
  • 0x05 Python数据分析,Anaconda八斩刀
  • FastReport在线报表设计器工作原理
  • JavaScript服务器推送技术之 WebSocket
  • JWT究竟是什么呢?
  • markdown编辑器简评
  • vue--为什么data属性必须是一个函数
  • 从零搭建Koa2 Server
  • 分布式熔断降级平台aegis
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 排序算法之--选择排序
  • 前端_面试
  • 通过几道题目学习二叉搜索树
  • 微信小程序设置上一页数据
  • 源码安装memcached和php memcache扩展
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • C# - 为值类型重定义相等性
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • %@ page import=%的用法
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (ibm)Java 语言的 XPath API
  • (Java)【深基9.例1】选举学生会
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (差分)胡桃爱原石
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (四)Controller接口控制器详解(三)
  • (一)Dubbo快速入门、介绍、使用
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .NET 解决重复提交问题
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NetCore项目nginx发布
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET关于 跳过SSL中遇到的问题
  • .net下简单快捷的数值高低位切换
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @angular/cli项目构建--Dynamic.Form
  • [ 蓝桥杯Web真题 ]-布局切换