275. H 指数 II
给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数,citations
已经按照 升序排列 。计算并返回该研究者的 h
指数。
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n
篇论文中)总共有 h
篇论文分别被引用了至少 h
次。且其余的 n - h
篇论文每篇被引用次数 不超过 h
次。
提示:如果 h
有多种可能的值,h
指数 是其中最大的那个。
请你设计并实现对数时间复杂度的算法解决此问题。
示例 1:
输入:
citations = [0,1,3,5,6]
输出:3 解释:给定数组表示研究者总共有5
篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6
次。 由于研究者有3
篇论文每篇 至少 被引用了3
次,其余两篇论文每篇被引用 不多于3
次,所以她的 h 指数是3
。
示例 2:
输入:citations = [1,2,100] 输出:2
提示:
n == citations.length
1 <= n <= 105
0 <= citations[i] <= 1000
citations
按 升序排列相似题目
原站题解
rust 解法, 执行用时: 0 ms, 内存消耗: 2.9 MB, 提交时间: 2023-10-30 00:22:49
impl Solution { pub fn h_index(citations: Vec<i32>) -> i32 { let n = citations.len(); let (mut left, mut right) = (0, n); while left < right { let mid = left + (right - left) / 2; if citations[mid] as usize >= n - mid { right = mid; } else { left = mid + 1; } } (n - left) as i32 } }
php 解法, 执行用时: 48 ms, 内存消耗: 28.2 MB, 提交时间: 2023-10-30 00:21:56
class Solution { /** * @param Integer[] $citations * @return Integer */ function hIndex($citations) { $n = count($citations); foreach ( $citations as $i => $h ) { if ( $h >= $n - $i ) { return $n - $i; } } return 0; } }
golang 解法, 执行用时: 12 ms, 内存消耗: 6.8 MB, 提交时间: 2023-10-30 00:20:19
func hIndex(citations []int) int { n := len(citations) return n - sort.Search(n, func(x int) bool { return citations[x] >= n-x }) }
cpp 解法, 执行用时: 16 ms, 内存消耗: 18.4 MB, 提交时间: 2023-10-30 00:20:05
class Solution { public: int hIndex(vector<int>& citations) { int n = citations.size(); int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (citations[mid] >= n - mid) { right = mid - 1; } else { left = mid + 1; } } return n - left; } };
javascript 解法, 执行用时: 56 ms, 内存消耗: 42.8 MB, 提交时间: 2023-10-30 00:19:52
/** * @param {number[]} citations * @return {number} */ var hIndex = function(citations) { let n = citations.length; let left = 0, right = n - 1; while (left <= right) { const mid = left + Math.floor((right - left) / 2); if (citations[mid] >= n - mid) { right = mid - 1; } else { left = mid + 1; } } return n - left; };
python3 解法, 执行用时: 32 ms, 内存消耗: 21.4 MB, 提交时间: 2023-10-30 00:19:35
class Solution: def hIndex(self, citations: List[int]) -> int: n = len(citations) left = 0; right = n - 1 while left <= right: mid = left + (right - left) // 2 if citations[mid] >= n - mid: right = mid - 1 else: left = mid + 1 return n - left
java 解法, 执行用时: 0 ms, 内存消耗: 49.3 MB, 提交时间: 2023-10-30 00:19:23
class Solution { public int hIndex(int[] citations) { int n = citations.length; int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (citations[mid] >= n - mid) { right = mid - 1; } else { left = mid + 1; } } return n - left; } }
golang 解法, 执行用时: 12 ms, 内存消耗: 6.6 MB, 提交时间: 2021-07-12 10:12:42
func hIndex(citations []int) int { n := len(citations) for i, h := range citations { if h >= n - i { return n-i } } return 0 }