首页 > 编程语言 >稀碎从零算法笔记Day36-LeetCode:H指数

稀碎从零算法笔记Day36-LeetCode:H指数

时间:2024-04-03 23:31:37浏览次数:23  
标签:指数 Day36 稀碎 len int citations 数组 LeetCode size

有点绕的一个题,题目描述的有点奇怪(可以看下英文?)

题型:数组、模拟

链接:274. H 指数 - 力扣(LeetCode)

来源:LeetCode

题目描述

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

根据维基百科上 h 指数的定义h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数 是其中最大的那个。

感觉英文也好抽象……

题目样例

提示:

  • n == citations.length
  • 1 <= n <= 5000
  • 0 <= citations[i] <= 1000

题目思路

感觉这题难点:①什么是H指数 ②怎么求H指数

看这个题目描述也能感觉出来两个条件:①(某些)论文的数量为H ②(这些)论文的引用量均≥H——即在数组中的值大于H

那么问题就抽象为:求H,H要尽可能大。影响H的因素是citations[i] 的大小

然后是怎么求H指数:由于H指数跟数组元素的大小相关,那么数组排序之后问题就会简单很多

受定义影响,H肯定是< citations.size() 的,那么可以看一下排序后,citations[0]是否≥citations.size(),如果True的话,那么说明citations数组所有数值都比citations.size()——H的最大情况都要大。所以此时H就可以为citations.size()-0;同理,citations[1]如果≥citations.size()-1的话,也能求出H指数。

那如果是i呢?遍历到i,自然说明了i前面的数都不行。那么就要看citations[i] 和 citations.size()-i的大小关系了

因为是从左往右遍历,可能是H的值是不断变小的,所以一旦相等,势必是最大的H指数

C++代码

class Solution {
public:
    int hIndex(vector<int>& citations) {
        // 看评论区的模拟法
        int numH =0;//h指数
        sort(citations.begin(),citations.end());//论文按照升序排列;
        int len = citations.size();
        for(int i = 0;i < len ;i++)
        {
            // 如果当前数值 比 后续元素的个数 大,那么i后面所有的数都比 这个个数 大,
            if(citations[i] >= len-i)
                return len -i;
        }
        // 遍历完了没找到,可能全为0
        return 0;
    }
};

结算页面

标签:指数,Day36,稀碎,len,int,citations,数组,LeetCode,size
From: https://blog.csdn.net/m0_63356844/article/details/137249843

相关文章

  • 【Leetcode】top 100 技巧
    136只出现一次的数字给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。技巧:异或  相同为0,剩到最后的数值只出现一次;c......
  • leetcode每日一题 1379. 找出克隆二叉树中的相同节点
    问题描述给你两棵二叉树,原始树original和克隆树cloned,以及一个位于原始树original中的目标节点target。其中,克隆树cloned是原始树original的一个副本。请找出在树cloned中,与target相同的节点,并返回对该节点的引用(在C/C++等有指针的语言中返回节点指针,其他......
  • LeetCode-1379. 找出克隆二叉树中的相同节点【树 深度优先搜索 广度优先搜索 二叉树】
    LeetCode-1379.找出克隆二叉树中的相同节点【树深度优先搜索广度优先搜索二叉树】题目描述:解题思路一:递归,由于我们比较的是节点而不是节点值(例如C++比较的是地址),所以下面的代码也适用于树中有值相同节点的情况(本题的进阶问题)。解题思路二:递归这题有几个关键点,一:判......
  • LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】
    LeetCode-146.LRU缓存【设计哈希表链表双向链表】题目描述:解题思路一:双向链表,函数get和put必须以O(1)的平均时间复杂度运行。一张图:解题思路二:0解题思路三:0题目描述:请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LR......
  • leetcode练习(4.2)
    1.相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 ......
  • 【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
    合并两个有序链表题目描述思路及实现方式一:迭代(推荐)思路代码实现Java版本C语言版本Python3版本复杂度分析方式二:递归(不推荐)思路代码实现Java版本C语言版本Python3版本复杂度分析总结相似题目标签:字符串处理、前缀判断题目描述将两个升序链表合并为一个新的升......
  • LeetCode 2461. Maximum Sum of Distinct Subarrays With Length K
    原题链接在这里:https://leetcode.com/problems/maximum-sum-of-distinct-subarrays-with-length-k/description/题目:Youaregivenanintegerarray nums andaninteger k.Findthemaximumsubarraysumofallthesubarraysof nums thatmeetthefollowingconditi......
  • leetcode128. 最长连续序列【三种方法; 并查集; hashtable】
    文章目录1O(nlo......
  • Leetcode--第1题(暴力解法C语言版)
    题目:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。/***Note:Thereturnedarraymustbemalloced,assum......
  • [LeetCode]12. K 个一组翻转链表 C语言实现
    Problem:25.K个一组翻转链表目录思路解题方法复杂度Code思路官方思路多指针+翻转链表+结构体解题方法定义多指针用来查找的头节点每一组的头节点每一组的尾节点,用来找到下一组头节点复杂度时间复杂度:添加时间复杂度,示例:$O(n)$空间复杂度:添加空......