C++語言實現H指數計算程式


假設我們有一組研究人員的論文引用次數。我們需要定義一個函式來計算研究人員的H指數。眾所周知,H指數是衡量研究人員論文影響力的指標。正式定義為:“如果一位研究人員的N篇論文中,有h篇論文每篇至少有h次引用,而其餘N-h篇論文每篇引用次數不超過h次,則該研究人員的H指數為h。”

因此,如果輸入為citations = [5, 4, 1, 2, 6],則輸出為3,因為至少有3篇論文的引用次數至少為3次——4, 5, 6。

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

  • n := 陣列大小,建立一個大小為n+1的陣列bucket
  • for i in range 0 to n – 1
    • x := c[i]
    • if x >= n, 則bucket[n]加1,否則bucket[x]加1
  • cnt := 0
  • for i in range n down to 0
    • cnt 加上 bucket[i]
    • if cnt >= i, 則返回i
  • 返回 – 1

讓我們看看下面的實現來更好地理解:

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<int>& c) {
      int n = c.size();
      vector <int> bucket(n + 1);
      for(int i = 0; i < n; i++){
         int x = c[i];
         if(x >= n){
            bucket[n]++;
         } else {
            bucket[x]++;
         }
      }
      int cnt = 0;
      for(int i = n; i >= 0; i--){
         cnt += bucket[i];
         if(cnt >= i)return i;
         } return -1;
      }
};
main(){
   Solution ob;
   vector<int> v = {5, 4, 1, 2, 6};
   cout << (ob.solve(v));
}

輸入

[5, 4, 1, 2, 6]

輸出

3

更新於:2020年11月19日

275 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.