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
廣告