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