[プログラマー]H-Index Python


質問する


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

せいげんじょうけん

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



    アイデア


    👎最初は、リストをreverse=Trueで並べ替え、前から後に順にリストを切り取り、リストの長さが対応する数より大きいリストをチェックできると思います.
  • に示される例では、[6,5,3,1,0]の順に並べられ、次いでドアの周りを長さで切断する.
  • は[6]、長さは1で、6個を超えない.
  • 以降[6,5]には5以上の論文が2編あり,適用されない.
  • [6,5,3]では,3つ以上の論文に3つの賞があり,h=3である.
  • [瓇Error]所与のテストケースは既に合格しているが、上記のように[8,7,6,5,3,2]を行った場合、h=4となるが、3となる.
    👍したがって、最大数を使用して最大数を検索し、その数より大きい場合に返される方法を1つずつ減らします.

    [#Error]ソリューション関数python

    def solution(citations):
        citations.sort(reverse=True)
        for i in range(len(citations)):
            if citations[i] <= len(citations[:i+1]):
                answer = citations[i]
                break
        return answer

    ソリューション関数python


    ::filter関数を使用して、その数以上の値の個数を計算します。

    def solution(citations):
        for i in range(max(citations),-1,-1):
            list_len = len(list(filter(lambda x : x >= i, citations)))
            if i <= list_len:
                answer = i
                break
        return answer

    他者コード


    :::列挙を使用して、idxとvalueから小さな値を選択し、resultとして最大数を返す表を生成します。


    idx12345value65310
    def solution(citations):
        citations.sort(reverse=True)
        answer = max(map(min, enumerate(citations, start=1)))
        return answer
    ソース:プログラマの回答