Giả sử chúng ta có một loạt các trích dẫn của một nhà nghiên cứu. Chúng ta phải xác định một hàm để tính chỉ số h của nhà nghiên cứu. Như chúng ta biết chỉ số h là một chỉ số được sử dụng để tính toán tác động của các bài báo của một nhà nghiên cứu. Chỉ số H chính thức có thể được định nghĩa là:"Một nhà nghiên cứu có chỉ số h nếu h trong số N bài báo của họ có ít nhất h trích dẫn mỗi bài và N-h bài báo khác có không quá h trích dẫn mỗi bài."
Vì vậy, nếu đầu vào giống như trích dẫn =[5, 4, 1, 2, 6], thì đầu ra sẽ là 3, vì ít nhất 3 bài báo có ít nhất 3 trích dẫn mỗi - 4, 5, 6.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- n:=kích thước của mảng, tạo một mảng được gọi là nhóm có kích thước n + 1
- cho tôi trong phạm vi từ 0 đến n - 1
- x:=c [i]
- nếu x> =n, thì hãy tăng nhóm [n] lên 1, nếu không thì tăng nhóm [x] lên 1
- cnt:=0
- đối với tôi trong phạm vi n xuống đến 0:
- tăng cnt theo nhóm [i]
- if cnt> =i, then return i
- trở lại - 1
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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)); }
Đầu vào
[5, 4, 1, 2, 6]
Đầu ra
3