H-Index

1383 ワード

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

I/O例説明
この科学者が発表した論文は5編あり、そのうち3編は3回以上引用された.また、残りの2つの論文は3回以下引用されたので、この科学者のh-indexは3である.
  • だからまずhは配列の値の中でもっと大きくない...0から最低価格までhが何なのかを繰り返し探せばいい
  • h以上引用したものはh以上、h以下引用したものはh以下でなければならない.また,この要求を満たすhの最低価格はhである.本当に紛らわしい
  • は、まず降順に並べられます.sort(reverse=True)
  • は、まずhを0に初期化し、0から配列[0]への繰り返しiでhを検索する.異常以下の値を計算するためにup、down変数も設定されています.
  • に配列された最初の要素から最後の要素まで、重複するfor文も内部に配置されます.したがって、現在確認されている要素がiより大きいとupが増加し、確認された要素がiより小さいとdownが増加します.
  • up(i回以上参照)はiより大きく、down(i回以下参照)はiより小さく、求めたiが現在のhより大きい場合、h=iとなる.
  • 出力
  • 最終h.
  • def solution(citations):
        h = 0
        citations.sort(reverse=True)
        for i in range(citations[0]) : 
            up = 0
            down = 0
            
            for j in citations :
                if j >= i :
                    up += 1
                if j <= i :
                    down += 1
                    
            if up>=i and down<=i and i > h :
                h = i
            
        return h