プログラマー-H-Index


1.質問


質問リンク

2.解答


まず、H-Indexの定義を見てみましょう.n件の論文のうち、h件以上の論文をh件以上引用し、残りの論文をh件以下引用した場合、h件の最大値となります.
もしそうであれば、citationsアレイを降順に配列する場合
特定の値H-index左の要素はh以上です.
右側の要素はh以下である可能性があります.
例えば、論文が次のようになった場合
[8, 7, 7, 6, 6, 1] - 논문들
[0  1  2  3  4  5] - 논문의 인덱스
H-index5番index
左の要素[8, 7, 7, 6, 6]は、5以上である.
右側の要素[1]は、5以下である.
では、正解H-indexを得る方法は
上で見つけたルールを満たします.
左の要素数がhより大きい点を見つけます.
[8, 7, 7, 6, 6, 1] - 논문들
[0  1  2  3  4  5] - 논문의 인덱스
インデックスが0の場合,8回以上引用した論文数は1編で(8 < 1) == falseを超える.
インデックスが1の場合,7回以上引用した論文数は2件で(7 < 2) == falseを超える.
...
インデックスが4の場合,引用回数が6回を超える論文は5編,(6 < 5) == false編を超える.
索引が5時-1回以上引用された論文の数は6編,正解は(1 < 6) == trueコードで実現します.5このように表現することができます
降順
  • 左の要素数が現在の要素値(参照回数)より大きい場合のインデックス
  • しかし、これは終わりではありません.
    このような例があればどうなりますか?const hIndex = citations.sort((a, b) => b - a).findIndex((v, i) => v < i + 1);最後のインデックスから開始[5, 5, 5, 5]なので、5(인용 횟수) < 4(마지막 인덱스 + 1) == falseに戻るのは間違いの答えです.
    もちろん、常識的には-1제일 적은 인용 횟수 5より小さい.
    このときn(논문의 개수)が正解です
    常識的に見ると,n(논문의 개수)については,すべての論文が4(논문의 개수)回以上引用されている.
    残りの4回以下に引用された論文は4編である.
    残りの0編の論文については,0回以下に引用されたかどうかを確認する必要はないからである.
    つまり、4回以上引用した論文がh編以上あることが重要な条件なのでしょうか..

    3.完全なコード

    function solution(citations) {
        const hIndex = citations.sort((a, b) => b - a).findIndex((v, i) => v < i + 1);
        return hIndex == -1 ? citations.length : hIndex;
    }