码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 274. H 指数


    文章目录

    • 一、题目
    • 二、C# 题解

    一、题目

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

      根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 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

      点击此处跳转题目。

    二、C# 题解

      先逆序排序,然后依次查找 h 数。这样做的时间复杂度主要取决于排序的复杂度,即 O(n)。

    public class Solution {
        public int HIndex(int[] citations) {
            Array.Sort(citations, (a, b) => b - a);
            for (int i = 0; i < citations.Length; i++) {
                if (citations[i] < i + 1) return i;
            }
            return 0;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 时间:80 ms,击败 77.9% 使用 C# 的用户
    • 内存:37.7 MB,击败 87.22% 使用 C# 的用户

      使用计数的方式可以做到 O(n) 的时间复杂度。

    public class Solution {
        public int HIndex(int[] citations) {
            int[] record = new int[citations.Length + 1]; // 记录数组,引用数为 i 的文章篇数为 record[i]
    
            // 进行记录,引用数超出 Length 的也记录在 Length 位置上
            for (int i = 0; i < citations.Length; i++) {
                if (citations[i] > citations.Length) record[citations.Length]++; 
                else record[citations[i]]++;
            }
    
            // 逆序遍历
            int sum = 0, j = record.Length - 1; // sum 表示引用数 > j 的文章个数
            while (j >= 0) {
                sum += record[j];
                if (sum >= j) break; // 第一次找到篇数比引用数 j 多的情况,直接退出循环
                j--;
            }
            return j;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 时间:80 ms,击败 77.9% 使用 C# 的用户
    • 内存:36.80 MB,击败 82.38% 使用 C# 的用户
  • 相关阅读:
    代码随想录笔记_动态规划_70爬楼梯
    JSON数据
    一场互联网与实体经济的深度融合,正头部企业的身上上演着
    8.4 数据结构——选择排序
    离线语音模块初步学习——LSYT201B(深圳雷龙发展)
    2022年全球市场高压无缝钢制气瓶总体规模、主要生产商、主要地区、产品和应用细分研究报告
    Kaggle Feedback Prize 3比赛总结:两种模型设计思路
    如何通过API接口获取item_get - 获得淘宝商品详情
    Cannot read properties of null bug解决方法
    Java开发的九大工作领域
  • 原文地址:https://blog.csdn.net/zheliku/article/details/133587838
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号