[プログラマー]H-Index(Java)


アルゴリズムの問題解決をブログにアップロードしたのは、コードを解答し、記録するためです.
これからは質問を吹き飛ばすよりも、リンクだけを残して、答えを見極めるために、私たちは皆さんに位置づけます!

📄 質問する


[プログラマー]H-index

👩‍💻 に答える


1.問題を理解する


この問題はh-index値を求める問題である.(シンプル;)
しかし,このh-index値を理解することから,少し骨が折れる.(理解してくれたのかと思ったら、変に解けました🚧シャベル∞...🚧)
問題では、h-index値は次のように定義されます.
ある科学者が発表した論文n編では、
h編以上引用した論文はh編以上である.
残りの論文がh次以下に引用された場合.
hの最値はこの科学者のh-indexである.

🚀 注意事項💥

  • 1)h値は、所与の参照の要素ではない.
    よく考えてint[] citations = {9, 9, 9, 4}!!!
  • (
  • 2)繰り返し文の周りを回る場合は,繰り返し文の範囲をよく検討する.
  • 問題をよく読む.answer = 4 h以上引用した論文はh編のみではない.以上行け!(事実上、2),3)は次の私の解答の中の問題点であり、プログラマーが発見した派手な解答の中で...そんなに重要ではありません.)

    2.解答


    中間中間コメントはデバッグの痕跡です.ㅓ汚いですが、コードの理解に役立つかもしれないと思い、残ってしまいました…!
  • 所与の引用文ソート
  • 大複文(i):0から参照の最値、参照にない潜在的なh値+、確認
  • 小複文(j):上記の潜在h値を参照要素と1つずつ比較する.
    i値が引用文[j]より小さい場合は、中断から開いて、参照する論文数を決定します.
    参照される論文数が潜在的なh値i(h번 이상 인용된 논문이 h편 이상이고)h以上である場合、
  • が更新される.
    import java.util.Arrays;
    
    public class Solution {
    
        public static void main(String[] args) {
            int[] citations = {0, 0, 1};
    
            System.out.println("answer: " + solution(citations));
        }
    
        public static int solution(int[] citations) {
            Arrays.sort(citations);
    
            int h = 0;
            for(int i = 0; i <= citations[citations.length-1]; i++) {
    //            System.out.println("현재 i : " + i);
                for(int j = 0; j < citations.length; j++) {
                    if(i <= citations[j]) {
    //                    System.out.println("i: " + i + " / j: " + j);
    //                    System.out.println("남은 논문 수 : " + (citations.length-j));
                        if(i <= citations.length-j) {
                            h = i;
    //                        System.out.println("h: " + h);
                        }
                        break;
                    }
                }
            }
    
            return h;
        }
    }

    3.プログラマーで見つけたFANCY🛸


    import java.util.Arrays;
    
    class Solution {
        public int solution(int[] citations) {
            int answer = 0;
            Arrays.sort(citations);
            for(int i=0; i<citations.length; i++){
                int smaller = Math.min(citations[i], citations.length-i);
                answer = Math.max(answer, smaller);
            }
            return answer;
        }
    }
  • 引用文ソート
  • 0~citation.時間が経つにつれて、
    引用文[i]と引用された論文数を比較し、より小さな論文をより小さな
  • に割り当てる
  • は、古い小さな値と新しい小さな値のうちの大きな値(最大h値)から
  • に更新された小さな値を更新し続けている.