C++ 中的 H-Index II


假設我們有一個研究人員的引用陣列(引用是非負整數)。這些數字按非遞減順序排序。我們必須定義一個函式來計算研究人員的 h 指數。根據 h 指數的定義:“如果一位科學家的 h 指數為 h,則他/她的 N 篇論文中至少有 h 篇論文的引用次數不少於 h 次,而其餘 N − h 篇論文的引用次數不超過 h 次。”

因此,如果輸入類似於 citations = [0,1,4,5,6],則輸出將為 3,因為它表示研究人員有五篇論文,它們分別獲得了 0、1、4、5、6 次引用。由於研究人員有 3 篇論文的引用次數至少為 4 次,其餘兩篇論文的引用次數不超過 4 次,因此 h 指數為 3。

為了解決這個問題,我們將遵循以下步驟:

  • ans := 0,low := 0,n := 陣列的大小,high := n – 1

  • 如果陣列的大小 = 0,則返回 0

  • 當 low <= high 時

    • mid := low + (high - low)/2

    • 如果 A[mid] = 陣列大小 – mid,則返回 A[mid]

    • 否則,當 A[mid] > n – mid 時,high := mid – 1

    • 否則,low := mid + 1

  • 返回 n – high – 1

示例 (C++)

讓我們看看以下實現,以便更好地理解:

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int hIndex(vector<int>& A) {
      int ans = 0;
      int low = 0;
      int n = A.size();
      int high = n - 1;
      if(A.size() == 0) return 0;
      while(low <= high){
         int mid = low + (high - low) / 2;
         if(A[mid] == A.size() - mid){
            return A[mid];
         }
         else if(A[mid] > (n - mid)){
            high = mid - 1;
         }
         else low = mid + 1;
      }
      return n - (high + 1);
   }
};
main(){
   Solution ob;
   vector<int> v = {0,1,4,5,7};
   cout << (ob.hIndex(v));
}

輸入

[0,1,4,5,6]

輸出

3

更新於:2020 年 5 月 2 日

194 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告