274. H-Index

LeetCode medium original: C# #array #csharp #leetcode #math #medium #search #sort
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Дан 배열 целых чисел citations, где citations[i] — количество цитирований, которое исследователь получил за свою i-ю статью. return h-индекс исследователя.

Согласно определению h-индекса на Википедии: h-индекс определяется как максимальное значение h, такое что данный исследователь опубликовал по крайней мере h статей, каждая из которых была процитирована как минимум h раз.

예제:

Input: citations = [3,0,6,1,5]

Output: 3

Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively.

Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, their h-index is 3.

C# 해법

매칭됨/원본
public class Solution {
    public int HIndex(int[] citations) {
        int n = citations.Length;
        int[] papers = new int[n + 1];
        foreach (int c in citations)
            papers[Math.Min(n, c)]++;
        int k = n;
        for (int s = papers[n]; k > s; s += papers[k])
            k--;
        return k;
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int HIndex(vector<int>& citations) {
        int n = citations.size();
        vector<int>& papers = new int[n + 1];
        foreach (int c in citations)
            papers[min(n, c)]++;
        int k = n;
        for (int s = papers[n]; k > s; s += papers[k])
            k--;
        return k;
    }
}

Java 해법

매칭됨/원본
public class Solution {
    public int hIndex(int[] citations) {
        int n = citations.length;
        int[] papers = new int[n + 1];
        for (int c : citations)
            papers[Math.min(n, c)]++;
        int k = n;
        for (int s = papers[n]; k > s; s += papers[k])
            k--;
        return k;
    }
}

JavaScript 해법

매칭됨/원본
var hIndex = function(citations) {
    let n = citations.length;
    let papers = new Array(n + 1).fill(0);
    for (let c of citations) {
        papers[Math.min(n, c)]++;
    }
    let k = n;
    for (let s = papers[n]; k > s; s += papers[k]) {
        k--;
    }
    return k;
};

Python 해법

매칭됨/원본
class Solution:
    def hIndex(self, citations: List[int]) -> int:
        n = len(citations)
        papers = [0] * (n + 1)
        for c in citations:
            papers[min(n, c)] += 1
        k = n
        s = papers[n]
        while k > s:
            k -= 1
            s += papers[k]
        return k

Go 해법

매칭됨/원본
func hIndex(citations []int) int {
    n := len(citations)
    papers := make([]int, n+1)
    for _, c := range citations {
        if c >= n {
            papers[n]++
        } else {
            papers[c]++
        }
    }
    k := n
    s := papers[n]
    for k > s {
        k--
        s += papers[k]
    }
    return k
}

Algorithm

1️⃣

Отсортировать 배열 цитирований по убыванию:

Отсортировать 배열 citations в порядке убывания, чтобы наибольшее количество цитирований было в начале 배열а.

2️⃣

find наибольшее значение i, для которого citations[i] > i:

Пройтись по отсортированному 배열у и find наибольшее значение i, для которого выполняется 문제 설명 citations[i] > i.

Это значение будет индексом, при котором количество цитирований статьи больше индекса.

3️⃣

Рассчитать h-индекс:

h-индекс будет равен i + 1, где i - наибольшее значение, найденное на предыдущем шаге.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.