274. H 指数

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

根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/h-index

官方题解

方法一:排序
首先我们可以将初始的H 指数 h 设为 0,然后将引用次数排序,并且对排序后的数组从大到小遍历。

根据 H 指数的定义,如果当前 H 指数为 h 并且在遍历过程中找到当前值 citations[i]>h,则说明我们找到了一篇被引用了至少 h+1 次的论文,所以将现有的 h 值加 1。继续遍历直到 h 无法继续增大。最后返回 h 作为最终答案。

前置知识点:

1.sort.Float64s,sort.Ints,sort.Strings分别对应的浮点数,整数,字符串切片的排序。(1)ints := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}sort.Ints(ints)//从小到大排列fmt.Println(ints) // [0 1 2 3 4 5 6 7 8 9](2)ints := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}sort.Sort(sort.Reverse(sort.IntSlice(ints)))//从大到小排列fmt.Println(ints) // [9 8 7 6 5 4 3 2 1 0]

 代码如下:

func hIndex(citations []int) int {var h int//要返回的h指数sort.Ints(citations)//sort.Float64s,sort.Ints,sort.Strings分别对应的浮点数,整数,字符串切片的从小到大排序。//i := len(citations) - 1, citation[i]为数组中的最大值//i >= 0 && citations[i] > h|   i >= 0:边界条件//citations[i] > h,从右向左遍历,h最初为零,i初始为数组长度-1,citations[i] > h则citations[i]至少为h+1,至少有1个数>h(0),让h++//h==1//i--从大到小遍历for i := len(citations) - 1; i >= 0 && citations[i] > h; i--{h++}return h}

方法二:计数排序
根据上述解法我们发现,最终的时间复杂度与排序算法的时间复杂度有关,所以我们可以使用计数排序算法,新建并维护一个数组  用来记录当前引用次数的论文有几篇。

根据定义,我们可以发现 H 指数不可能大于总的论文发表数,所以对于引用次数超过论文发表数的情况,我们可以将其按照总的论文发表数来计算即可。这样我们可以限制参与排序的数的大小为 [0,n](其中 n 为总的论文发表数),使得计数排序的时间复杂度降低到O(n)。

最后我们可以从后向前遍历数组counter,对于每个0≤i≤n,在数组counter 中得到大于或等于当前引用次数 i 的总论文数。当我们找到一个 H 指数时跳出循环,并返回结果。

func hIndex(citations []int) int {n := len(citations)//记录数组长度counter := make([]int, n + 1)//创建切片,长度为n+1,范围为0-n,存放引用次数为0-n次的论文的数目for _, citation := range citations{if citation >= n{//因为h 篇论文分别被引用了至少 h 次,论文引用次数最大==发表的论文的数目,//当论文引用次数>论文数目时,用论文数目n代替counter[n]++}else{//记录引用次数counter[citation]++}}for i, tot := n, 0; i >= 0; i--{//从右往左遍历,则h会返回最大的tot += counter[i]//tot为引用次数>=i的论文数目if tot >= i{//有tot篇论文分别被引用了至少i次,i,tot-ireturn i}}return 0
}

一.数组(10)274. H 指数(不怎么理解)相关推荐

  1. LeetCode 981. 基于时间的键值存储 / 274. H 指数 / 275. H 指数 II

    981. 基于时间的键值存储 2021.7.10 每日一题 题目描述 创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作:1. set(string key, string value, ...

  2. LeetCode Algorithm 274. H 指数

    274. H 指数 Ideas H指数表示的是有h篇论文被引用了至少h次. 我们可以将citations逆序排列,表示引用次数从高到底排列. 如果我们从前向后遍历数组,那么第i位上值v,就表示至少有i ...

  3. LeetCode 274. H指数(排序,哈希)

    1. 题目 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高引用次数"(high c ...

  4. 274. H 指数----中等

    题目 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义:h 代表"高引用次数"(high citations), ...

  5. 274. H 指数(中)

    思路 首先看到h个元素大于等于某个值,N-h个元素小于等于某个值,这显然是一个有序序列的特征,所以自然而然的想到先将数组排序: 将数组排序之后,对于给定的某个i,我们知道有citations.leng ...

  6. 二分答案——H指数(Leetcode 274)

    题目选自Leetcode 274. H指数 二分查找(答案)的简单题~ 理解题意 这个例子有点儿特殊,论文被引用了 3 次,篇数有 3 篇.再来看一个更一般的例子: 结论: 这条分割线越靠左边,说明被 ...

  7. LeetCode 275. H指数 II(二分查找)

    1. 题目 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高引用次数&q ...

  8. leetcode 274, 275. H-Index I, II(H 指数问题合集,线性查找/二分查找)

    274. H-Index https://leetcode.com/problems/h-index/ 题解 第一遍没看懂题目.看了中文版的题目才明白,是要找到 h,满足总共有 h 篇论文分别被引用了 ...

  9. 【Android 10 源码】深入理解 Omx 初始化

    MediaCodec 系列文章: [Android 10 源码]深入理解 MediaCodec 硬解码初始化 [Android 10 源码]深入理解 Omx 初始化 [Android 10 源码]深入 ...

  10. 全球 Top 1000 计算机科学家 h 指数公布,中国顶尖计算机科学家人数进入前三

    整理 | Carol 出品 | CSDN(ID:CSDNnews) 近日,Guide2Research公布了2021年世界顶尖1000名计算机科学家排名.美国科学家登榜数量达614名,稳居上榜科学家数 ...

最新文章

  1. 基于koajs的web项目构建-心得篇
  2. string :操作总结
  3. wpf scrollviewer 两个事件相互影响_WPF绘制3D效果显示密集立体集装箱
  4. Web开发(一)·期末不挂之第三章·HTML基础二(html实现表格和表单)
  5. python类和对象实例_python的类和实例化对象
  6. 【算法系列之十】三数之和
  7. JavaScript-传值(引用类型,基本类型)
  8. 利用哈夫曼编码英文字母表
  9. php判断是否连续出现数字,php通过gbk编码判断 含有连续数字 可用于判断QQ号,手机号等。...
  10. 基于centos搭建reviewboard
  11. 微信公众号运营靠谱吗?怎么样判断公司需要代运营?
  12. 微信小程序基础库的问题
  13. Python变量赋值出现SyntaxError: invalid syntax
  14. 1.1.1. Ordinary Least Squares(普通最小二乘)
  15. 电脑网络连接不上怎么办
  16. 网站面包屑导航对SEO优化重要性
  17. Python爬虫学习手册
  18. 懒汉模式在多线程中的问题
  19. 征集令 | 全国爱眼日主题宣传活动 | 66爱眼护眼照片征集、视频征集大赛
  20. STM32F103读取富思i6(i-bus)协议,基于固件库开发的版本(V3.5)

热门文章

  1. 办公室计算机打印机共享,如何将办公室的所有电脑共享一个打印机???
  2. 微信分享透明背景图片背景变黑
  3. python批量删除txt文本前面几行和最后几行
  4. column xxx is of type integer but expression is of type character varying。String的成员变量存到int的数据库列 报错
  5. 程序员鄙视链, 所有工程师都鄙视php工程师, 为什么
  6. 路由器自动获取ip失败
  7. 暴雪正在等待另一项_战网正在等待另一项安装或更新_魔兽世界 升6.0 战网更新一直卡在正在等待另一项安装或更新 已尝试离线 还是各种等待 求大神破...
  8. thrift安装天坑
  9. 更新Windows 11后,桌面狂闪,没有显示图标,鼠标指针一直在加载中,如何解决?
  10. 在线PS编辑器使用教程(Photoshop)