Golang每日一练(leetDay0094) H 指数 I\II H Index

news/2024/12/29 3:00:22/

 

目录

274. H 指数  H Index  🌟🌟

275. H 指数 II H Index ii  🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


274. H 指数  H Index

给你一个整数数组 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

提示:

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

代码1:排序

package mainimport ("fmt""sort"
)func hIndex(citations []int) int {sort.Ints(citations)n := len(citations)for i, val := range citations {if val >= n-i {return n - i}}return 0
}func main() {citations := []int{3, 0, 6, 1, 5}fmt.Println(hIndex(citations)) // 输出:3citations = []int{1, 3, 1}fmt.Println(hIndex(citations)) // 输出:1
}

代码2:计数排序

package mainimport "fmt"func hIndex(citations []int) int {n := len(citations)cnt := make([]int, n+1)for _, val := range citations {if val < n {cnt[val]++} else {cnt[n]++}}h := 0for i := n; i >= 0; i-- {h += cnt[i]if h >= i {return i}}return 0
}func main() {citations := []int{3, 0, 6, 1, 5}fmt.Println(hIndex(citations)) // 输出:3citations = []int{1, 3, 1}fmt.Println(hIndex(citations)) // 输出:1
}

代码3:二分查找

package mainimport "fmt"func hIndex(citations []int) int {l, r := 0, len(citations)-1n := len(citations)for l <= r {mid := l + (r-l)/2cnt := hIndexCount(citations, citations[mid])if cnt == citations[mid] {return cnt} else if cnt < citations[mid] {r = mid - 1} else {if mid+1 == n || hIndexCount(citations, citations[mid+1]) < citations[mid+1] {return citations[mid]}l = mid + 1}}return 0
}func hIndexCount(nums []int, h int) int {count := 0for _, num := range nums {if num >= h {count++}}return count
}func main() {citations := []int{3, 0, 6, 1, 5}fmt.Println(hIndex(citations)) // 输出:3citations = []int{1, 3, 1}fmt.Println(hIndex(citations)) // 输出:1
}

输出:

3
1


275. H 指数 II H Index ii

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

​ h 指数的定义: ​h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。

提示:如果 h 有多种可能的值,h 指数 是其中最大的那个。

请你设计并实现对数时间复杂度的算法解决此问题。

示例 1:

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

示例 2:

输入:citations = [1,2,100]
输出:2

提示:

  • n == citations.length
  • 1 <= n <= 10^5
  • 0 <= citations[i] <= 1000
  • citations 按 升序排列

代码1:二分查找

package mainimport "fmt"func hIndexII(citations []int) int {n := len(citations)l, r := 0, n-1for l <= r {mid := l + (r-l)/2if citations[mid] >= n-mid {r = mid - 1} else {l = mid + 1}}return n - l
}func main() {citations := []int{0, 1, 3, 5, 6}fmt.Println(hIndexII(citations)) // 输出:3citations = []int{1, 2, 100}fmt.Println(hIndexII(citations)) // 输出:2
}

代码2:线性扫描

package mainimport "fmt"func hIndexII(citations []int) int {n := len(citations)h := 0for i := n - 1; i >= 0 && citations[i] >= n-i; i-- {h = n - i}return h
}func main() {citations := []int{0, 1, 3, 5, 6}fmt.Println(hIndexII(citations)) // 输出:3citations = []int{1, 2, 100}fmt.Println(hIndexII(citations)) // 输出:2
}

输出:

3
2


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更


http://www.ppmy.cn/news/338963.html

相关文章

18650锂电池和常规锂电池有什么区别

18650锂电池和常规锂电池有什么区别&#xff1f;随着锂电池应用越来越广泛&#xff0c;各类产品选用锂电池的也越来越多目前移动电源市场上一般来说,存在两种电芯,一种是18650电芯,另一种是聚合物锂电芯。常见的18650电池分为锂离子电池、磷酸铁锂电池。锂离子电池电压为标称电…

锂电池基本知识

参考资料 锂电池快速充电方法 电池放电C率 锂电池基础知识及名词介绍 1. 电池种类 锂电池是可充电电池&#xff0c;一般的锂电池充满电是4.2V也有其它电压的电池。锂电池容量是xxxmAh&#xff0c;比如1000mAh&#xff0c;即1000mA的供电电流可以用1小时。500mA供电能用2小时。依…

锂电池相关

锂离子电池目前由液态锂离子电池(LIB)和聚合物锂离子电池(PLB)两类。 单节锂电池的电压为3.7V&#xff08;磷酸亚铁锂正极的为3.2V&#xff09;&#xff0c;电池容量也不可能无限大&#xff0c;因此&#xff0c;常常将单节锂电池进行串、并联处理&#xff0c;以满足不同场合的…

九龙证券|磷酸铁锂电池包和铅酸电池有哪些区别?

目前&#xff0c;新能源汽车电动车一般用的电池有3种&#xff0c;铅酸蓄电池、镍氢充电电池、锂离子电池。伴随着电动车蓄电池技能工艺的升级换代&#xff0c;锂电池的发展壮大和应用领域日益持续上升。那么&#xff0c;磷酸铁锂电池包和铅酸电池有哪些差异呢&#xff1f;铅酸蓄…

动力电池的主要参数

1.电压 单位&#xff1a;V 开路电压 电池外部不接任何负载或电源&#xff0c;测量电池正负极之间的电位差。 工作电压 电池外接上负载或电源&#xff0c;有电流流过电池&#xff0c;测量电池正负极之间的电位差。 充电终止电压 充电时电压的极限值。 放电终止电压 放电…

锂电池--问题表

一、电池充不满&#xff0c;可能原因如下&#xff1a; 1. 恒压环输出电压精度不够&#xff0c;充满电压4.2V精度问题。 2. 截止充电电流精度差&#xff0c;过早关断&#xff0c;电池充电饱和度不够 3. 芯片损坏或异常&#xff0c;恒压输出电压远低于充满电压&#xff0c;基本…

新能源汽车电池的发展及类型

目录 1.铅酸电池&#xff08;第一代&#xff09; 2.锂离子电池&#xff08;第二代&#xff09; 3.飞轮电池&#xff0c;超级电容器&#xff08;第三代&#xff09; 4.EV汽车锂动力电池性能及分类 1.铅酸电池&#xff08;第一代&#xff09; 优点技术成熟、成本低缺点比能量…