Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình tìm H-Index từ danh sách các trích dẫn trong C ++

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