タイトル説明
一度だけ、他の数に登場配列は数回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);
}
}
参考:ブルーブリッジカップコーチングセッション - 「アルゴリズムが美しいです」