面试经典150题——H指数

embedded/2024/9/24 7:38:24/

面试经典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/embedded/7153.html

相关文章

装饰器的语法糖及装饰器修复技术

【一】无参装饰器语法糖 没有语法糖的装饰器方法&#xff1a; def timer(func):def inner():start time.time()func()end time.time()print(f"总耗时&#xff1a;{end - start} s") ​return inner ​ ​ def transform():time.sleep(2) ​ ​ tra timer(transf…

百度AI大会发布的APP Builder和Agent Builder有什么区别

百度在AI大会发布了三款AI工具&#xff0c;包括智能体开发工具AgentBuilder、AI原生应用开发工具AppBuilder、各种尺寸的模型定制工具ModelBuilder 有很多人就问&#xff0c;APP Builder和Agent Builder有什么不一样&#xff0c;怎么那么多builder? 你们就这么理解&#xff…

xss攻击原理与解决方法

概述 XSS攻击是Web攻击中最常见的攻击方法之一&#xff0c;它是通过对网页注入可执行代码且成功地被浏览器 执行&#xff0c;达到攻击的目的&#xff0c;形成了一次有效XSS攻击&#xff0c;一旦攻击成功&#xff0c;它可以获取用户的联系人列 表&#xff0c;然后向联系人发送虚…

Let’s Encrypt 申请免费https证书(snapd安装)

Let’s Encrypt 最近给域名安装免费的https证书 Let’s Encrypt&#xff0c;发现跟之前的安装方式不太一样&#xff0c;这里记录一下安装过程 https://certbot.eff.org/instructions?wsnginx&oscentosrhel7 https://eff-certbot.readthedocs.io/en/latest/using.html#ng…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理&#xff0c;也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

MATLAB求和函数

语法 S sum(A) S sum(A,“all”) S sum(A,dim) S sum(A,vecdim) S sum(,outtype) S sum(,nanflag) 说明 示例 S sum(A) 返回沿大小大于 1 的第一个数组维度计算的元素之和。 如果 A 是向量&#xff0c;则 sum(A) 返回元素之和。 如果 A 是矩阵&#xff0c;则 sum(A) 将…

电脑工作者缓解眼部疲劳问题的工具分享

背景 作为以电脑为主要工作工具的人群&#xff0c;特别是开发人员&#xff0c;我们每天都需要长时间紧盯着屏幕&#xff0c;进行代码编写、程序调试、资料查询等工作。这种持续的工作模式无疑给我们的眼睛带来了不小的负担。一天下来&#xff0c;我们常常会感到眼睛干涩、疲劳…

转:Learn Rust the Dangerous Way-系列文章翻译-总述

原文地址 太精彩了&#xff0c;不转不足以表达我的喜爱。 前言 《Learn Rust the Dangerous Way》​cliffle.com/p/dangerust/ 最近发现了一个学习Rust的优秀系列文章&#xff0c;本人准备对该系列文章进行翻译。 本文是《Learn Rust the Dangerous Way》系列文章翻译的第…