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

news2024/11/8 16:46:30

 

目录

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 main

import (
	"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)) // 输出:3
	citations = []int{1, 3, 1}
	fmt.Println(hIndex(citations)) // 输出:1
}

代码2:计数排序

package main

import "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 := 0
	for 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)) // 输出:3
	citations = []int{1, 3, 1}
	fmt.Println(hIndex(citations)) // 输出:1
}

代码3:二分查找

package main

import "fmt"

func hIndex(citations []int) int {
	l, r := 0, len(citations)-1
	n := len(citations)
	for l <= r {
		mid := l + (r-l)/2
		cnt := 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 := 0
	for _, num := range nums {
		if num >= h {
			count++
		}
	}
	return count
}

func main() {
	citations := []int{3, 0, 6, 1, 5}
	fmt.Println(hIndex(citations)) // 输出:3
	citations = []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 main

import "fmt"

func hIndexII(citations []int) int {
	n := len(citations)
	l, r := 0, n-1
	for l <= r {
		mid := l + (r-l)/2
		if 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)) // 输出:3
	citations = []int{1, 2, 100}
	fmt.Println(hIndexII(citations)) // 输出:2
}

代码2:线性扫描

package main

import "fmt"

func hIndexII(citations []int) int {
    n := len(citations)
    h := 0
    for 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)) // 输出:3
	citations = []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.coloradmin.cn/o/635963.html

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

相关文章

sqlserver数据库学习感悟(1)----关于group by

以下含编写过程&#xff0c;如果嫌啰嗦&#xff0c;最后有总结哒&#xff01; 例题&#xff1a;有heat表和eatables两张表&#xff0c;分别为&#xff1a; eatables heat&#xff1a;protein&#xff08;蛋白质&#xff09;&#xff0c;fat&#xff08;脂肪&#xff09;&…

架构演变过程

单体架构 分布式架构&#xff1a;业务拆分 微服务 分布式架构的一种。独立开发和部署&#xff0c;一个业务多个服务支持 特点&#xff1a; 单一职责&#xff1a;拆分粒度更小&#xff0c;一个服务一个业务&#xff0c;避免重复开发&#xff08;面向对象角度来说符合最少知道原…

软考A计划-系统架构师-学习笔记-第五弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Swift——如何将某一进制的数字按另一种进制输出(比如十进制输出打印成十六进制,八进制打印输出成二进制)

最近由于需要阅读比较老的文档&#xff0c;老文档里内存地址是用八进制而不是十六进制&#xff0c;所以需要写一个小工具&#xff0c;用来转换进制进制。虽然自带的计算器可以&#xff0c;但是数量一多比较麻烦。 一开始我想费劲吧啦写十二个转换函数&#xff0c;虽然有些函数可…

chatgpt赋能python:Python字符串:如何定义一个空字符串

Python字符串&#xff1a;如何定义一个空字符串 在Python中&#xff0c;字符串是一种常见的数据类型&#xff0c;通常用于存储文本信息。定义一个空字符串在Python中非常简单&#xff0c;本文将介绍如何定义一个空字符串以及在Python中使用字符串的一些常见操作。 定义一个空…

基于Java+SpringBoot+Vue前后端分离摄影分享网站平台系统

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

python课程设计:实现一个飞行训练成绩管理微信息系统,对飞行员的某门飞行课目成绩进行质量评定

一、编程题目 在日常飞行训练中,飞行训练成绩是 飞行员进行综合等级评定的重要依据。 假设飞行训练团在某次飞行训练结束后,要对飞行员的某门飞行课目成绩进行质量评定。 请编程实现一个飞行训练成绩管理系统。要求完成以下功能: 1录入成绩 2计算平均分 3计算最高分 4查…

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章开始介绍vxlan虚拟设备。 主要介绍vxlan的协议报文结构&#xff0c; 1、总结 主要涉及到以下方面&#xff1a; overlay跟vxlan的关系如何理解v…

Excel电子表格的PHP类库:PHP_XLSXWriter(大数据量报表、后台运行、浏览器下载)

Excel电子表格的PHP类库&#xff1a;PHP_XLSXWriter 一、PHP_XLSXWriter与PHPExcel的区别二、PHP_XLSXWriter的使用1.使用步骤2.后台下载3.浏览器下载4.封装函数 PHP_XLSXWriter 是一个用于生成 Microsoft Excel 2007 xlsx 文件的 PHP 库。XLSX 是一种用基于 XML 的开放式文件标…

chatgpt赋能python:Python多行缩进——提高代码可读性和效率的关键

Python多行缩进——提高代码可读性和效率的关键 众所周知&#xff0c;Python是一种缩进敏感的编程语言&#xff0c;它鼓励程序员使用缩进来表示代码块&#xff0c;而非传统的大括号或关键字。在Python中&#xff0c;缩进通过使用空格或制表符来实现&#xff0c;而且空格和制表…

深度剖析整形数据在内存中的存储

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习数据的存储。 让我们开启c语言学…

Linux命令(31)之watch

Linux命令之watch 1.watch介绍 linux命令watch是周期性的用来执行某命令&#xff0c;并把某命令执行结果输出到屏幕上。使用watch命令&#xff0c;可以周期性的监测并输出某命令的执行结果到屏幕上&#xff0c;省得手动一遍一遍运行某命令&#xff0c;提高工作效率。 2.watc…

PHP伪协议filter详解,php://filter协议过滤器

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 php://filter 一、访问数据流二、过滤数据流三、多…

[第一章 web入门]SQL注入-2

拿到题目后看提示&#xff0c;要自主访问两个页面 访问login.php后&#xff0c;是一个登录界面&#xff0c;直接测试注入类型 第一件事还是输入常用账户名admin&#xff0c;密码随便输入 回显账号或者密码错误 这种登录界面一般都是字符型注入&#xff0c;所以测试一下闭合符&a…

【力扣刷题 | 第七天】

前言&#xff1a; 今天我们将会进入栈与队列的刷题篇章&#xff0c;二者都是经典的数据结构&#xff0c;熟练的掌握栈与队列实现可以巧妙的解决有些问题。 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队…

野火Renesas R4M2 UDS诊断bootloader 升级MCU

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

从零开始Vue项目中使用MapboxGL开发三维地图教程(一)MapboxGL介绍以及前期vue项目的搭建

MapboxGL介绍以及前期vue项目的搭建 1、Mapbox-gl简介2、搭建vue项目2.1、创建vue项目2.2、注册mapbox官网2.3、mapbox-gl入门案例 3、Mapbox-gl地图主要配置参数说明 1、Mapbox-gl简介 Mapbox-gl是一个开源、基于webgl技术的前端地图类库。 地图数据渲染和可视化这块我们经常用…

chatgpt赋能python:如何培训Python?-从入门到专业化

如何培训Python&#xff1f;- 从入门到专业化 Python是一种高级编程语言&#xff0c;已被广泛应用于各种领域以及各种应用程序的开发中。如果你也想成为一名Python开发人员&#xff0c;有以下几种培训方法帮助你一步步实现你的目标。 1.自学Python 学习Python的最简单方法是…

【前端 - CSS】第 13 课 - CSS 应用案例 - 体育新闻

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 最近学习完了 CSS 的 引入方式、选择器 和 字体修饰属性 的相关知识点&#xff0c;然后运…

redis(一),redis简介,Linux下安装及基本配置

一.redis简介&#xff1a; 1.什么是redis Redis 是完全开源的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的 key-value 数据库。它属于NoSQL数据库。 2.NoSQL简介&#xff1a; NoSQL有两种说法&#xff0c;一般指的是非关系型数据库&#xff0c;另一种说法是说它是“…