3日目は、k回を解決し、複数回表示されるように、Javaで表示されます

タイトル説明

一度だけ、他の数に登場配列は数回kを受けている、一度だけと出力の数と思われて見つけます。

問題解決のアプローチ

メソッド
キー、スキャンアレイ、+1の数値キーに対応する各出現、ハッシュテーブルの最終出力値の鍵1として、各番号をハッシュテーブルを使用して。

方法II
キャリー加算器と、桁上げ加算がk-aryの結果がゼロである追加の同じ数kによって特徴付けされていません。番号アレイは、すなわち番号が一度だけ表示され、小数Kにバイナリからの結果を加算し、次に、進kに変換されます。

第二の方法で問題を行使するために、

コード

public class 出现k次与出现1{
    public static void main(String[] args) {
        int [] arr={1,1,1,4,4,4,8,9,9,9,0,0,0,11,11,11};
        int k=3;   //出现k次
        int len=arr.length;
        char [][] arr2=new char[len][];
        int maxLen=0;
        //将10进制转为k进制,重点是进制转换和字符反转的妙用
        for(int i=0;i<len;i++){
            arr2[i]=new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray();
            if(maxLen<arr2[i].length)
                maxLen=arr2[i].length;
        }
        int []arr3=new int[maxLen];
        //做不进位加法
        for(int i=0;i<len;i++){
            for(int j=0;j<maxLen;j++){
                if(j>=arr2[i].length)
                    arr3[j]+=0;
                else
                    arr3[j]+=(arr2[i][j]-'0');
            }
        }
        int result=0;
        //将k进制转化为二进制
        for(int i=0;i<maxLen;i++){
            result+=(arr3[i]%k)*(int)(Math.pow(k,i));
        }
        System.out.println(result);
    }
}

参考:ブルーブリッジカップコーチングセッション - 「アルゴリズムが美しいです」

リリース3元の記事 ウォンの賞賛0 ビュー1339

おすすめ

転載: blog.csdn.net/weixin_44915222/article/details/104078749