1. 程式人生 > 其它 >【LeetCode】274. H-Index H 指數(Medium)(JAVA)

【LeetCode】274. H-Index H 指數(Medium)(JAVA)

技術標籤:Leetcodeleetcodejava面試資料結構演算法

【LeetCode】274. H-Index H 指數(Medium)(JAVA)

題目地址: https://leetcode.com/problems/h-index/

題目描述:

Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher’s h-index.

According to the definition of h-index on Wikipedia: “A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each.”

Example:

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, her h-index is 3.

Note:If there are several possible values for h, the maximum one is taken as the h-index.

題目大意

給定一位研究者論文被引用次數的陣列(被引用次數是非負整數)。編寫一個方法,計算出研究者的 h指數。

h 指數的定義:h 代表“高引用次數”(high citations),一名科研人員的 h 指數是指他(她)的 (N 篇論文中)總共有 h 篇論文分別被引用了至少 h 次。且其餘的N - h篇論文每篇被引用次數不超過 h 次。

例如:某人的 h 指數是 20,這表示他已發表的論文中,每篇被引用了至少 20 次的論文總共有 20 篇。

提示:如果 h 有多種可能的值,h 指數是其中最大的那個。

解題方法

  1. 對 citations 進行排序
  2. 從大往小遍歷,i + 1 表示當前的篇數,如果要滿足 h 的條件的話,需要有 i + 1 篇的 citation 大於等於 i + 1,那就是 citations[citations.length - 1 - i] >= i + 1 (也就是這 i + 1 篇 citation 的最小值大於等於 i + 1)
class Solution {
    public int hIndex(int[] citations) {
        Arrays.sort(citations);
        for (int i = 0; i < citations.length; i++) {
            if (citations[citations.length - 1 - i] <= i) return i;
        }
        return citations.length;
    }
}

執行耗時:1 ms,擊敗了84.68% 的Java使用者
記憶體消耗:36.6 MB,擊敗了48.60% 的Java使用者

歡迎關注我的公眾號,LeetCode 每日一題更新