面试经典150题——H指数

server/2024/10/21 2:41:17/

面试经典150题 day11

      • 题目来源
      • 我的题解
        • 方法一 排序+从后往前遍历
        • 方法二 计数排序+后缀和
        • 方法三 排序+从左到右遍历

题目来源

力扣每日一题;题序:274

我的题解

方法一 排序+从后往前遍历

先将数组升序排序,然后h从n到0开始遍历,计算被引用次数大于等于 h的论文数

时间复杂度:O(nlogn)
空间复杂度:O(1)

java">public int hIndex(int[] citations) {int n=citations.length;Arrays.sort(citations);int count=0;//表示h值时,被引用次数大于等于 h的论文数int index=n;//表示h值for(int i=n-1;i>=0;i--){//当引用值大于h时,需要将count加1if(citations[i]>=index)count++;else{//若被引用次数大于等于 h的论文数大于h则直接返回h值,因为是从大往小遍历的if(count>=index)return index;//更新h值while(citations[i]<index&&count<index)index--;//当引用值大于h时,需要将count加1if(citations[i]>=index)count++;}}//返回最终的h值return index;
}
方法二 计数排序+后缀和

先计算每个引用次数出现的次数(引用次数大于n的作为n处理),然后计算器后缀和,只要suf[i]>=i则返回i,否则继续求前缀和。

时间复杂度:O(n)
空间复杂度:O(n)

java">    public int hIndex(int[] citations) {int n=citations.length;int[] count=new int[n+1];for(int i=0;i<n;i++){if(citations[i]>=n)count[n]++;elsecount[citations[i]]++;}for(int i=n;i>=0;i--){if(i!=n)count[i]+=count[i+1];if(count[i]>=i)return i;}return 0;}
方法三 排序+从左到右遍历

直接先排序,并将h初始设置为0,每当末尾的满足 citations[right]>h时,h加一。

时间复杂度:O(nlogn)
空间复杂度:O(1)

java">public int hIndex(int[] citations) {Arrays.sort(citations);int h=0;int right=citations.length-1;while(right>=0&&citations[right]>h){h++;right--;}return h;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.ppmy.cn/server/4900.html

相关文章

2024-04-14 问AI: 在深度学习中,为什么需要激活函数?

文心一言 在深度学习中&#xff0c;激活函数起着至关重要的作用&#xff0c;主要有以下几个原因&#xff1a; 引入非线性特性&#xff1a;深度学习的目标之一是模拟人脑的复杂功能和决策过程。然而&#xff0c;线性模型的组合仍然是线性的&#xff0c;这限制了模型的表示能力…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

基于SpringBoot+Vue的便利店管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7/8.0 数据表&#xff1a;11张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;vue 后端技术&#xff1a;SpringBoot 功能简介 (有文档) 项目获取关键字&#…

二维码门楼牌管理应用平台建设:智慧化网格巡查的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景与意义二、网格巡查功能的优势三、网格巡查在实际工作中的应用价值四、结语 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成为城市管理的重要创新。通过该平台&#xff0c;民警和网格员能够…

Linux中进程和计划任务

一.程序 1.什么是程序 &#xff08;1&#xff09;是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 &#xff08;2&#xff09;用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二.进程 1.什么是进程…

MYSQL之事务

事务有哪些特性&#xff1f; 四大特性&#xff1a;ACID 原子性&#xff1a;一个事务的操作要么全部成功&#xff0c;要么全部失败。 一致性&#xff1a;是指事务操作前和操作后&#xff0c;数据满足完整性约束&#xff0c;数据库保持一致性状态。 隔离性&#xff1a;事务和事…

Win11启用HyperV

Win11启用HyperV 编辑一个txt&#xff0c;输入下面的指令 pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in (findstr /i . hyper-v.txt 2^>nul) do dism /online /norestart /add-package:"%SystemRoot%…

mac dex2jar安装

如果你在终端中收到 “zsh: command not found: dex2jar” 的消息&#xff0c;这意味着 dex2jar 工具没有安装在你的系统中&#xff0c;或者没有被添加到系统的 PATH 环境变量中。为了解决这个问题&#xff0c;你需要按照以下步骤操作&#xff1a; 下载 dex2jar&#xff1a; 前…