プログラマソートレベル3:H-Indexアルゴリズムプール



1.問題の説明


H-Indexは科学者の生産力と影響力を測定する指標である.ある科学者のh-indexを表すh値を求めたいです.ウィキペディア1によると、H-Indexの計算は以下の通り.
ある科学者が発表したn編の論文の中で、h編以上の論文を引用し、残りの論文がh次以下に引用された場合、hの最高価格はこの科学者のh-indexである.
ある科学者が論文を発表する引用回数の配列参照をパラメータとして与えた場合,その科学者のH−Indexを返すために解関数を記述してください.

せいげんじょうけん


科学者が発表した論文の数は1編以上1000編以下である.
論文引用回数は0回以上10000回以下である.

I/O例


citationsreturn[3, 0, 6, 1, 5]3

I/O例説明


この科学者が発表した論文は5編あり、そのうち3編は3回以上引用された.また、残りの2つの論文は3回以下引用されたので、この科学者のh-indexは3である.

2.問題を理解する


与えられた参照リストの要素について、n個以上の値の最大値を求める.
参照リストの値のみが適用されないことに注意してください.
つまり、=[0,3,4]を参照すると、結果値は2になる可能性があります.
この質問を調べたところ、ほとんどの人がそれを理解していないため、思考範囲が狭く、答えが得られないことがわかりました.

3.問題を解く


並べ替えリスト
citations.sort()
  • sort():与えられた値を昇順に並べ替えます.
    sort関数を用いて元の参照値[3,0,6,1,5]を[0,1,3,5,6]に並べ替えた.
    リスト内の特定の要素の値より大きい値
  • for i in range(citations[-1]):
            if i == sum(i <= x for x in citations):
                answer = i
                return answer
            if i <= sum(i <= x for x in citations):
                answer = i
  • および(i<=x for xin参照)は、参照リスト内の要素の中でi以上の数を表す.
  • for i in range(citations[-1]):
  • は、クエリ範囲を0から引用文の最大数の引用文[-1]値を優先的に与える.これによりiは0から参照の最後の値と最大の数値参照[−1]値に増加する.
  • そして、リスト要素の値がH-Indexの場合、
  • if i == sum(i <= x for x in citations):
                answer = i
                return answer
  • ビットのif文を作成するだけですが、[0,1,2]リストのh-index値は1、1またはそれ以上の値は2で、上記のif文条件に合致しません.リスト要素の値がH-Indexでない場合、H-Index値は見つかりません.
  • if i <= sum(i <= x for x in citations):
                answer = i

  • そこで、上記のようにif文を作成し、iの値を答えに入れました.
    これにより、リスト要素にH-Index値がない場合でも、H-Index値を検索できます.
    ※最初のifゲートを外し、上のifゲートのみを使うと結果は同じですが、h-index値を見つけたときにforゲートをすぐに閉じないと時間の複雑さにも問題があるので、最初のifゲートを使うのがおすすめです.
    最初のif文が存在する場合
    最初のif文は存在しません

  • 最後に、リストが[0,0,0]の場合、for文ではH-Index値が見つからないため、答え値を0に初期化する必要があります.
  • 4. solution

    def solution(citations):
        answer = 0
        citations.sort()
        for i in range(citations[-1]):
            if i == sum(i <= x for x in citations):
                answer = i
                return answer
            if i <= sum(i <= x for x in citations):
                answer = i
        return answer