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

【leetcode】274.H指数

为了方便,将 citations 记为 cs。

所谓的 h 指数是指一个具体的数值,该数值为“最大”的满足「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」定义的合法数,重点是“最大”。

用题面的实例 1 来举个 🌰,给定所有论文的引用次数情况为 cs = [3,0,6,1,5],可统计满足定义的数值有哪些:

h=0,含义为「至少发表了 0 篇,且这 0 篇论文至少被引用 0 次」,空集即满足,恒成立;

h=1,含义为「至少发表了 1 篇,且这 1 篇论文至少被引用 1 次」,可以找到这样的组合,如 [3],成立;

h=2,含义为「至少发表了 2 篇,且这 2 篇论文至少被引用 2 次」,可以找到这样的组合,如 [3, 6],成立;

h=3,含义为「至少发表了 3 篇,且这 3 篇论文至少被引用 3 次」,可以找到这样的组合,如 [3, 6, 5],成立;

h=4,含义为「至少发表了 4 篇,且这 4 篇论文至少被引用 4 次」,找不到这样的组合,不成立;

...

实际上,当遇到第一个无法满足的数时,更大的数值就没必要找了。一个简单的推导:

至少出现 k 次的论文数不足 k 篇 => 至少出现 k+1 次的论文必然不足 k 篇 => 至少出现 k+1 次的论文必然不足 k+1 篇(即更大的 h 不满足)。

二分
基于此分析,我们发现对于任意的 cs(论文总数量为该数组长度 n),都必然对应了一个最大的 h 值,且小于等于该 h 值的情况均满足,大于该 h 值的均不满足。

那么,在以最大 h 值为分割点的数轴上具有「二段性」,可通过「二分」求解该分割点(答案)。

最后考虑在什么值域范围内进行二分?

一个合格的二分范围,仅需确保答案在此范围内即可。

再回看我们关于 h 的定义「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」,满足条件除了引用次数,还有论文数量,而总的论文数量只有 n,因此最大的 h 只能是 n 本身,而不能是比 n 大的数,否则论文数量就不够了。

综上,我们只需要在 [0,n] 范围进行二分即可。对于任意二分值 mid,只需线性扫描 cs 即可知道其是否合法。

代码:

int hIndex(int* citations, int citationsSize) {
int left=0,right=citationsSize;int mid=0,cnt=0;while(left<right){// +1 防止死循环mid=(left+right+1)>>1;cnt=0;for(int i=0;i<citationsSize;i++){if(citations[i]>=mid){cnt++;}}if(cnt>=mid){// 要找的答案在 [mid,right] 区间内left=mid;}else{// 要找的答案在 [0,mid) 区间内right=mid-1;}}return left;}

作者:宫水三叶
 

 

相关文章:

【leetcode】274.H指数

为了方便&#xff0c;将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值&#xff0c;该数值为“最大”的满足「至少发表了 x 篇论文&#xff0c;且每篇论文至少被引用 x 次」定义的合法数&#xff0c;重点是“最大”。 用题面的实例 1 来举个 &#x1f330;&#xff0…...

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)

一、字面量 1、基本介绍 在代码中&#xff0c;被写直接下来的、不需要通过变量存储的值&#xff0c;称之为字面量 2、常用值类型 类型说明数字&#xff08;Number&#xff09;整数&#xff08;int&#xff09;&#xff0c;例如&#xff1a;10、-10浮点数&#xff08;float&…...

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失&#xff08;Vanishing Gradient&#xff09; 和梯度爆炸&#xff08;Exploding Gradient&#xff09; 是神经网络训练中的常见问题&#xff0c;特别是在深层神经网络&#xff08;DNN&#xff09;或递归神经网络&#xff08;RNN&#xff09;中。这两者主要与反向传播算…...

在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中&#xff0c;重新封装http模块可以提供一个更简洁、更易于使用的API&#xff0c;同时隐藏底层细节&#xff0c;使开发者能够更专注于业务逻辑。以下是一个简单的示例&#xff0c;展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块&#xff1a; // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響&#xff0c;更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面&#xff0c;並增加了一些新的功能&#xff0c;像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)

1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题&#xff0c;面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序&#xff0c;通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分

目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化&#xff0c;它会随着Pod的结束而销…...

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事&#xff1a;设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算&#xff0c;而 ImVec2 没有这个运算符的定义&#xff0c;只有 glm::vec2 有这个运算…...

helm 测试卸载或删除(redis)

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/02/07 18:30 查看redis 集群实例 kubectl get all -n redis 卸载集群实例 helm uninstall redis -n redis 删除pvc kubectl get pvc -n redis kubectl delete pvc redis-data-redis-master-0 redis-data-redis-replicas…...

关于Qt音乐播放器进度条拖拽无用的问题解决方案

在使用Qt编写音乐播放器的时候&#xff0c;进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候&#xff0c;可能会报错如下&#xff1a; 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…...

Redis:初识Redis

Redis&#xff1a;初识Redis Redis 介绍分布式架构Redis特性安装Redis Redis 介绍 在官网中&#xff0c;是如下介绍Redis的&#xff1a; in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and messag…...

【React】增量传输与渲染

增量传输 增量传输是一种高效的文件传输方式&#xff0c;其核心原理在于只传输文件中发生变化的部分&#xff0c;而不是整个文件。以下是增量传输的详细解析&#xff1a; 定义与原理&#xff1a; 增量传输通过比对原始文件和目标文件&#xff0c;找出两者之间的差异部分&#…...

【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验

前言 分析时Tessy的报错 1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory 2.error: #error "Compiler unsupported" 3.warning: invalid suffix on literal;C11 requires a space between literal and string macro 4.error: unknown…...

2024 - 10 :生物药学: 如何获取对应核心靶点基因的激酶

如何获取对应核心靶点基因的激酶 步骤 1&#xff1a;收集蛋白质信息 获取 UniProt ID&#xff1a; 对于每个基因&#xff0c;使用 UniProt 数据库获取其对应的蛋白质信息&#xff0c;包括 UniProt ID、序列和功能注释。UniProt 网站&#xff1a;https://www.uniprot.org/ 示…...

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法&#xff0c;详细介绍STM32F407微控制器结合HAL库&#xff0c;通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时&#xff0c;系统才会反馈“密码正确”的确认信息。反之&…...

数据结构--线性表双向链表的实现

目录 思路设计 总体思维导图 插入部分 头插法尾插法 任意位置插入 删除部分 头结点 尾节点 中间节点 只有头结点且删除的就是头结点 ​编辑 清空链表部分 遍历清空链表的所有节点 不遍历清空 各部分代码 Main部分 MyListedList部分 IndexOutOfException部分 …...

第一个Flutter应用(一)

1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范&#xff0c;其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码&#xff08;为了阅…...

批量查询快递单号物流信息:高效掌握最后更新动态

在电商和物流行业蓬勃发展的今天&#xff0c;快递单号的物流信息追踪显得尤为重要。对于商家和客户来说&#xff0c;了解包裹的最后更新物流状态是确保货物安全、及时送达的关键。本文将介绍如何批量查询快递单号的物流信息&#xff0c;帮助您高效掌握每个包裹的最新动态。 1运…...

问卷星 vs 腾讯问卷 vs 金数据:2026主流问卷工具AI开放能力最新横评

作为问卷调研行业的深度观察者&#xff0c;老N近期注意到调研工具链正在发生一场静悄悄的革命。最近&#xff0c;问卷星正式上线了AI工具包&#xff08;wjx-ai-kit&#xff09;&#xff0c;其CLI&#xff08;命令行工具&#xff09;支持多达67个子命令&#xff0c;并适配了Clau…...

SDEP协议与SPI-BLE数据传输:从理论到实战的深度解析

1. SDEP协议与SPI-BLE数据传输&#xff1a;从理论到实战的深度解析在物联网和嵌入式开发领域&#xff0c;如何让一个资源受限的微控制器&#xff08;MCU&#xff09;与一个复杂的无线模块稳定、高效地“对话”&#xff0c;一直是个既基础又关键的挑战。你可能遇到过这样的场景&…...

别再死记PRBS7/15了!用Python+NumPy手搓一个可配置的PRBS码生成器(附完整代码)

用Python构建可配置PRBS生成器&#xff1a;从LFSR原理到信号仿真实战 在数字通信和高速电路设计中&#xff0c;工程师们经常需要生成特定的测试信号来验证系统性能。伪随机二进制序列&#xff08;PRBS&#xff09;因其近似真实数据流的特性&#xff0c;成为信号完整性测试的黄金…...

深度解析Beyond Compare 5密钥生成:从逆向工程到高效激活的实用指南

深度解析Beyond Compare 5密钥生成&#xff1a;从逆向工程到高效激活的实用指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权验证领域&#xff0c;Beyond Compare 5的RSA加密机制一…...

从stakpak/paks看现代软件包管理:不可变、声明式与分层架构实践

1. 项目概述&#xff1a;从“stakpak/paks”看现代软件包管理的演进最近在折腾一个老项目的依赖管理&#xff0c;又被各种版本冲突和依赖地狱搞得焦头烂额。这让我想起了几年前第一次接触stakpak/paks这个项目时的情景。当时&#xff0c;它更像是一个前沿的探索&#xff0c;试图…...

AI写作检测规避:原理、工具与实践指南

1. 项目概述&#xff1a;为什么我们需要“AI写作检测规避”工具&#xff1f;在内容创作领域&#xff0c;尤其是技术博客、学术写作和日常办公文档中&#xff0c;AI辅助写作工具已经变得无处不在。它们能快速生成草稿、润色语言、甚至构建复杂的技术方案。然而&#xff0c;随之而…...

5分钟搞定Windows包管理器:winget-install终极配置指南

5分钟搞定Windows包管理器&#xff1a;winget-install终极配置指南 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi…...

Blender MMD插件终极指南:三步实现专业级MMD模型制作

Blender MMD插件终极指南&#xff1a;三步实现专业级MMD模型制作 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools 想…...

提供充电桩运维托管的服务商:选择标准与服务内容解析

一、引言据中国电动汽车充电基础设施促进联盟&#xff08;EVCIPA&#xff09;数据显示&#xff0c;截截至2026年2月底&#xff0c;我国电动汽车充电基础设施&#xff08;枪&#xff09;总数达到2101.0万个&#xff0c;同比增长47.8%。其中&#xff0c;公共充电设施&#xff08;…...

淘宝反爬升级应对:从Selenium到Playwright的迁移实践

前言 随着淘宝反爬体系持续迭代升级&#xff0c;传统 Selenium 爬虫面临指纹特征暴露、浏览器特征极易识别、检测门槛持续降低三大痛点。大量基于 Selenium 的淘宝爬虫出现账号限流、页面 403 拦截、滑块强校验、直接封禁 IP 等问题。 在电商爬虫、价格监控、商品采集、店铺数…...