【leetcode面试经典150题】11.H指数(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

【题目描述】

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

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

【示例一】

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

【示例二】

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

【提示及数据范围】

  • n == citations.length
  • 1 <= n <= 5000
  • 0 <= citations[i] <= 1000

【代码】

// 方法一:排序// 初始的 H 指数 h 设为 0,然后将引用次数排序,并且对排序后的数组从大到小遍历。
// 根据 H 指数的定义,如果当前 H 指数为 h 并且在遍历过程中找到当前值 citations[i]>h ,
// 则说明我们找到了一篇被引用了至少 h+1 次的论文,所以将现有的 h 值加 1。
// 继续遍历直到 h 无法继续增大。最后返回 h 作为最终答案。int hIndex(vector<int>& citations) {sort(citations.begin(), citations.end());int h = 0, i = citations.size() - 1;while (i >= 0 && citations[i] > h) {h++;i--;}return h;
}// 方法二:计数排序// 新建并维护一个数组 counter 用来记录当前引用次数的论文有几篇。
// 从后向前遍历数组 counter,对于每个 0 ≤ i ≤ n,
// 在数组 counter 中得到大于或等于当前引用次数 i 的总论文数。
// 当我们找到一个 H 指数时跳出循环,并返回结果。
int hIndex(vector<int>& citations) {int n = citations.size(), tot = 0;vector<int> counter(n + 1);for (int i = 0; i < n; i++) {if (citations[i] >= n) {counter[n]++;} else {counter[citations[i]]++;}}for (int i = n; i >= 0; i--) {tot += counter[i];if (tot >= i) {return i;}}return 0;
}// 方法三:二分// 设查找范围的初始左边界 left 为 0,初始右边界 right 为 n。
// 每次在查找范围内取中点 mid,同时扫描整个数组,判断是否至少有 mid 个数大于 mid。
// 如果有,说明要寻找的 h 在搜索区间的右边,反之则在左边。int hIndex(vector<int>& citations) {int left=0,right=citations.size();int mid=0,cnt=0;while(left<right){// +1 防止死循环mid=(left+right+1)>>1;cnt=0;for(int i=0;i<citations.size();i++){if(citations[i]>=mid){cnt++;}}if(cnt>=mid){// 要找的答案在 [mid,right] 区间内left=mid;}else{// 要找的答案在 [0,mid) 区间内right=mid-1;}}return left;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关东升老师力作!四本编程宝典,带你畅游编程世界

&#x1f31f;《看漫画学C》&#xff1a;关东升老师以漫画的形式&#xff0c;让你在欢笑中轻松掌握C编程的核心知识。不再枯燥&#xff0c;不再难懂&#xff0c;让编程变得有趣又简单&#xff01; &#x1f3a8;《MATLAB科研绘图与学术图表绘制从入门到精通》&#xff1a;关东升…

数学中的各种符号虚数概念

max i∈S​A i ​ ≥ ∑ i∈S​B i​. 这个不等式表达的意思是对于集合 S 中的任意非空子集&#xff0c;子集中的最大的 A_i&#xff08;A 的元素&#xff09;的值都大于等于子集中所有 B_i&#xff08;B 的元素&#xff09;的值的总和。换句话说&#xff0c;集合 S 中的最大…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list&#xff0c;文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码&#xff0c;链表是由一块一块不连续的空间组成的&#xff0c;所以这里写了三个模板&#xff0c;一个是节点&#xff0c;一…

koc和kol是什么意思?

一、koc和kol是什么意思&#xff1f; koc和kol是专业术语。KOC是关键意见消费者的意思&#xff0c;是Key Opinion Consumer的缩写&#xff1b;KOL是关键意见领袖的意思&#xff0c;是Key Opinion Leader的缩写。 1、关键意见领袖kol “关键意见领袖”通俗地讲是达人。这些人…

应用开发:python解析斗鱼弹幕

解决问题 互动弹幕&#xff0c;关注提问 &#xff0c;ai回答 技术 python playwright 调用接口 https://github.com/broven/DouYudanmu/blob/master/douyu.py 演示 放弃 这个根本不是研究方向 定位错误 你浪费下午时间&#xff0c;定位错误 这个跟本不是你的方向。 4个小时看斗…

OMP实现压缩感知的实现(MATLAB)

本文介绍通过DWT和OMP实现压缩感知。 不同的是,将DWT得到的低频放到了作为稀疏矩阵的顶部。 压缩感知 压缩感知算法是一种用于从高维度数据中恢复稀疏信号的方法。它通常用于处理信号的采样和重建,例如图像或音频。以下是压缩感知算法的一般实现细节: 信号表示: 压缩感知算…

蓝桥杯第六届c++大学B组详解

前言&#xff1a; 看了很多博客以及视频讲解&#xff0c;感觉都不是很清楚&#xff0c;比较模棱两可&#xff0c;所以干脆自己一边想&#xff0c;一边写博客&#xff0c;也可帮助到其他人&#xff0c;都是根据自己的逻辑来尽量清楚简单的讲清楚题目&#xff0c;喜欢的不要吝啬三…

计算机笔记(4)续20个

61.指出CPU下一次要执行的指令的地址的部件称为程序计数器 62.动态随机存储器&#xff0c;最为常见的系统内存&#xff0c;即DRAM。DRAM只能将数据保持很短的时间。为了保持数据&#xff0c;DRAM使用电容存储&#xff0c;所以必须隔一段时间刷新一次&#xff0c;如果存储单元没…

Python数据分析十六

一、Python的字典的操作方法popitem和setdefault 当你使用Python中的字典数据类型时&#xff0c;可能会经常用到一些操作方法&#xff0c;比如popitem()和setdefault()。下面我将为你详细讲解这两个方法&#xff0c;并给出相应的代码示例。 1.popitem()方法&#xff1a; pop…

HTTP的介绍

一.什么是HTTP&#xff1f; Hyper Text Transfer Protocol,超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 二.HTTP的特点 &#xff08;1&#xff09;基于TCP协议&#xff1a;面向连接&#xff0c;安全 &#xff08;2&#xff09;基于请求-响应模型的&…

卡奥斯工业互联网平台分析

一、 背景 卡奥斯是海尔推出的具有中国自主知识产权、全球首家引入用户全流程参与体验的工业互联网平台。其核心是大规模定制模式&#xff0c;通过持续与用户交互&#xff0c;将硬件体验变为场景体验&#xff0c;将用户由被动的购买者变为参与者、创造者&#xff0c;将企业由原…

违法解除劳动合同后【股票争议】——案例学习

目录 结论&#xff1a;不统一 观点一&#xff1a; 不属于劳动争议 观点二&#xff1a; 属于劳动争议 股权激励收益是否属于劳动报酬应结合以下要素综合判断&#xff1a; 股权激励收益应属于劳动报酬 问题&#xff1a;违法解除劳动合同后&#xff0c;涉股权激励争议是否属于…

【1】初识 Python

【1】初识 Python 1、编程语言(1) 语言(2) 编程语言(3) 如何利用编程语言与计算机交流(4) 常见的编程语言(5) 语法 2、Python 简介(1) 什么是 Python(2) Python 能做什么(3) Python 的由来(4) Python的特点① 语法精简② 生态好&#xff0c;开发效率高③ Python开发初体验&…

练习 21 Web [GXYCTF2019]BabySQli

SQL联合查询&#xff0c;注意有源码看源码&#xff0c;Base64以及32的区别&#xff0c;MD5碰撞 打开后有登录框&#xff0c;先随意登录尝试 只有输入admin才是返回wrong pass&#xff01; 其他返回wrong user 所以用户名字段一定要输入admin 养成好习惯&#xff0c;先查看源码…

删除mysql表卡死 , 打不开,一直转圈圈

最近用navicat删除某一张表时&#xff0c;直接卡死转圈圈&#xff0c;导致navicat直接无响应, 想着是不是自己navicat有问题&#xff0c;换同事电脑来删这张表&#xff0c;还是同样问题。 多次尝试才整明白&#xff0c;根本不是navicat的问题.是mysql 的表锁死了! 如果频繁的对…

ChatGPT 之优势与缺陷

原文&#xff1a; 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 欢迎来到《ChatGPT&#xff1a;好的、坏的和丑陋的》。在本书中&#xff0c;我们踏上了探索 ChatGPT 多面世界的旅程&#xff0c;这是由 OpenAI 开发的先进自然语言处理模型。随着 ChatGPT 和类似…

华三Sec Path

1、设备特点 外观&#xff1a; 功能特点&#xff1a; 安全特性&#xff1a; vFW的默认账号密码&#xff1a;admin 2、安全区域 1&#xff09;相同安全级别的集合 2&#xff09;默认的安全域 【1】区域 trust、untrust、local&#xff08;所有有接口属于local&#xff0c;…

机器人开启私聊配置自定义接口的方式

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 今天给大家介绍一下&#xff0c;如何在机器人中开启私聊回复。 前提条件&#xff1a;机器人已经启动好了&#xff0c;且功能也都可以正常使用&#xff0c;如果没有启动&#xff0c;可以联…

一网打尽计算机网络难题:100个问答助你轻松掌握【文末送书福利】

文章目录 一&#xff0c;物理层二&#xff0c;数据链路层三&#xff0c;网络层四&#xff0c;传输层五&#xff0c;应用层专栏推荐粉丝福利 欢迎订阅查看学习&#xff1a;Java编程基础教程系列&#xff08;零基础小白搬砖逆袭&#xff09; 一&#xff0c;物理层 题&#xff1a…

Git入门实战教程之合并分支并解决冲突

在开发过程中&#xff0c;难免会遇到代码冲突的情况&#xff0c;那么该如何处理呢&#xff1f; 分支策略&#xff1a;首先master主分支应该是非常稳定的&#xff0c;也就是用来发布新版本&#xff0c;一般情况下不允许在上面干活&#xff0c;干活一般情况下在新建的dev分支上干…