貪欲なアルゴリズムの小さなアプリケーション

質問を読んだ後、各変更の最小操作数を見つける方法を考えました。配列は最初は順序付けられていないため、操作数を明確に理解する方法はないので、最初に配列を並べ替えてから並べ替えます、各数値が前の数値より大きいかどうかを確認し、最小のオペランドを満たしていることを確認します。証明は次のとおりです
。A配列が順序付けられていると仮定すると、特定の数値が次の数値になる場合は、前の数値が次の数値よりも小さい必要があります。前回とは異なる番号を常に追加する必要がありますが、現時点では、後者の方が早くなりたい番号になる可能性があることを考えると、スキップした番号はもっと大きくする必要があります。したがって、上記の結果は真です:
コードは次のとおりです

    public int minIncrementForUnique(int[] A) {
        Arrays.sort(A);
        int res=0;
        for(int i=1;i<A.length;i++){
            if(A[i]>A[i-1]) continue;
            res=res+A[i-1]+1-A[i];
            A[i]=A[i-1]+1;
        }
        return res;
    }

 

元の記事を17件公開しました 賞賛されました0 訪問数153

おすすめ

転載: blog.csdn.net/qq_33286699/article/details/105030989