当前位置: 首页 > news >正文

【附JS、Python、C++题解】Leetcode面试150题(11)H指数

一、题目

274. H 指数

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

根据维基百科上 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

二、思路

1. 在这个问题中我们需要确定的几个数字:

  • 论文总篇数:元素个数(数组长度)l = citations.length
  • 论文引用数:元素值 n = citations[i]
  • 找到“至少”:我们需要找到一个值 h,使得至少有 h 篇论文被引用次数大于等于 h
  • 确认是否满足条件:检查是否有至少 h 篇论文的引用次数大于等于 h
  • h 指数:满足上述条件的最大值 h

那基本的判断逻辑已经确定:

  • 首先,对 citations 数组进行排序,这样可以更方便地计算 h 指数。
  • 从排序后的数组的末尾开始遍历,计算当前的 h 值。l - i 表示当前的 h 值,citations[i] 表示当前论文的引用次数。
  • 如果 citations[i] 大于等于 l - i,说明当前的 h 值满足条件,记录下来并退出循环。
  • 如果遍历完整个数组都没有找到满足条件的 h 值,返回 0。

三、代码

① JavaScript:

function getHIndex(citations){
    let l = citations.length;
    citations.sort((a,b)=>a-b);
    // 自定义升序排列,传递一个比较函数作为参数
    for(let i =0; i<l; i++){
        if(citations[i]>=l-i){
            return l-i;
        }
    }
    return 0;
}

② python: 

def h_index(citations):
    citations.sort()  # 对引用次数进行排序
    l = len(citations)
    h = 0
    for i in range(l):
        if citations[i] >= l - i:
            h = l - i
            break
    return h

③ C++:

int getHIndex(const std::vector<int>& citations) {
    std::vector<int> sortedCitations = citations;  // 创建一个副本进行排序
    std::sort(sortedCitations.begin(), sortedCitations.end());  // 对引用次数进行排序
    int l = sortedCitations.size();
    for (int i = 0; i < l; i++) {
        if (sortedCitations[i] >= l - i) {
            return l - i;
        }
    }
    return 0;  // 如果没有满足条件的 h 值,返回 0
}

四、反思

1.刚开始的思路是从最小的元素开始判断,但是发现如果最小的元素并不满足要求,还得找到第二小的元素再来一遍,想到之前用到的简化方法——先排序再处理。(如下面这道题)

【附JS、Python、C++题解】Leetcode面试150题(9)——三数之和-CSDN博客

2.  将题目条件归纳到数学式子中,什么时候h满足条件?citations[i] >= l-i 的时候。

相关文章:

  • 做平面设计都关注哪些网站网站优化策略分析
  • 东莞网站建设aj工作室如何编写一个网站
  • 如何在手机上做自己的网站备案查询站长工具
  • 在免费空间上传网站为什么访问不了友情链接检测659292
  • 长沙网络营销学校快速seo排名优化
  • 朝阳网站建设公司电话网络整合营销公司
  • DeepSeek分析仿写选题应该怎么做?
  • Hyperlane框架临时上下文数据管理:提升Web开发效率的利器
  • 【导航定位】GNSS数据协议-RINEX OBS
  • JavaScript函数式编程思想
  • Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)
  • 前端基础知识汇总
  • 大模型 rag 技术浅析(一)
  • 深入 OpenPDF:高级 PDF 生成与操作技巧
  • LinuxTCP/UDP基础概念
  • 解压多个文件
  • 解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误
  • 【文献25/03/29】UPFormer:用于田间葡萄叶病害分割的U形感知轻量级Transformer
  • 现代优雅杂志海报徽标设计手写英文字体安装包 Attomes – Brush Handwritten Font
  • JavaScript 中的异步编程:回调函数、Promise 和 async/await
  • redhat认证是永久的吗
  • Pinia 及其持久化插件的完整使用指南
  • 食物链 POJ - 1182分析与解答
  • QtAdvancedStylesheets使用
  • 论坛系统自动化测试报告
  • ARM向量表