C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の引用リストからH指数を見つけるプログラム


研究者の引用がたくさんあるとします。研究者のh指数を計算する関数を定義する必要があります。私たちが知っているように、h指数は研究者の論文の影響を計算するために使用される測定基準です。正式には、H指数は次のように定義できます。「研究者は、N個の論文のh個にそれぞれ少なくともh個の引用があり、他のN −h個の論文にはそれぞれh個以下の引用がある場合に指数hを持ちます。」

したがって、入力がcitations =[5、4、1、2、6]のようである場合、少なくとも3つの論文にはそれぞれ少なくとも3つの引用があるため、出力は3になります。

これを解決するには、次の手順に従います-

  • n:=配列のサイズ、サイズn+1のバケットと呼ばれる1つの配列を作成します
  • 0からn–1の範囲のiの場合
    • x:=c [i]
    • x> =nの場合は、bucket [n]を1増やし、それ以外の場合は、bucket[x]を1増やします
  • cnt:=0
  • nから0までの範囲のiの場合:
    • バケットごとにcntを増やす[i]
    • 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

  1. C++で二重リンクリストのサイズを見つけるプログラム

    この問題では、二重にリンクされたリストが与えられます。私たちのタスクは、C++で二重リンクリストのサイズを見つけるプログラムを作成することです。 二重リンクリストは特殊なタイプのリンクリストであり、単一リンクリストと比較して、順方向と逆方向の両方の方法で簡単にナビゲーションできます。以下は、二重リンクリストの概念を理解するための重要な用語です。 リンク-リンクリストの各リンクには、要素と呼ばれるデータを格納できます。 次へ-リンクリストの各リンクには、次と呼ばれる次のリンクへのリンクが含まれています。 前-リンクリストの各リンクには、前と呼ばれる前のリンクへのリンクが含ま

  2. 隣接リストを実装するC++プログラム

    グラフの隣接リスト表現は、リンクリスト表現です。この表現では、リストの配列があります。配列のサイズはVです。ここで、Vは頂点の数です。つまり、V個の異なるリストを格納する配列があると言えます。リストヘッダーが頂点uの場合、uの隣接するすべての頂点を保持することを意味します。 隣接リスト表現の複雑さ この表現は、無向グラフの場合はO(V + 2E)を取り、有向グラフの場合はO(V + E)を取ります。エッジの数を増やすと、必要なスペースも増えます。 入力 : 出力 : アルゴリズム add_edge(adj_list、u、v) 入力 :エッジ{u、v}のuとv、およ