3

3 つの整数の配列があるとします。if ステートメントまたは for ループを使用して、これらの配列からこれらの結果を取得できるようにしたいと考えています。

[0,1,2] = 0 equal
[0,1,0] = 2 equal
[0,0,0] = 3 equal

これは私がこれまでに持っていたものであり、機能しますが、単純化できると思います。

int numequal = 0;

if(intarr[0] != null && intarr[1] != null && intarr[0].numequals(intarr[1])) {
    numequal++;
}

if(intarr[0] != null && intarr[2] != null && intarr[0].numequals(intarr[2])) {
    numequal++;
}

if(intarr[1] != null && intarr[2] != null && intarr[1].numequals(intarr[2])) {
    numequal++;
}

if(numequal == 1) {
    numequal = 2;
}

また、私はそれを基本に保つようにしています。ループのためだけかもしれません。ハッシュ セットや辞書はありません。

4

5 に答える 5

1

これが私の解決策です。単純ではありませんが、非常に効率的です。現在、null 要素もカウントされますが、望ましくない場合は簡単に修正できます。

    Integer[] a = { null, 2, 1, null, 0, 1 };
    Arrays.sort(a, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 == null) {
                return -1;
            }
            if (o2 == null) {
                return 1;
            }
            return o1.compareTo(o2);
        }
    });
    // [null, null, 0, 1, 1, 2]
    int n = 0;
    Integer prev = null;
    Boolean first = null;
    for (Integer e : a) {
        if (first != null && (e == prev || e != null && e.equals(prev))) {
            if (first == Boolean.TRUE) {
                n += 2;
                first = Boolean.FALSE;
            } else {
                n++;
            }
        } else {
            first = Boolean.TRUE;
        }
        prev = e;
    }
    System.out.println(n);
于 2012-12-08T09:56:46.140 に答える
1

あなたはおそらく本当に簡単な解決策を探しているので、コードを少し最適化しようとしました:

int[] intarr = {'0','1','2'};
int numequal = 0; 

if(intarr[0] == intarr[1] || intarr[0] == intarr[2] ){
    numequal++;
}
if( intarr[1] == intarr[2]){
    numequal++;
}

if (numequal > 0 ){
    numequal++;
}

int[]をチェックする必要がないため、配列が宣言されている場合nulls
intarr[1] != null

一部の項目が設定されていない場合は、デフォルトになります0

于 2012-12-08T15:11:17.057 に答える
1

これが最も簡単な方法だと思います(一部は異なるかもしれません):

int[] x = { 1, 1, 2, 4, 6, 7, 5, 6, 4, 2, 3, 1, 6, 6, 5, 6, 5, 6, 4, 5, 9,
    7, 8, 6, 5, 4, 6 };
int rep = 0;
int finalc = 0;

for (int i = 0; i < x.length; i++) {
  int basec = 0;
  for (int j = 0; j < x.length; j++) {
    if (x[i] == x[j]) {
      basec++;
    }
  }
  if (basec > finalc) {
    finalc = basec;
    rep = x[i];
  }
}

System.out.println("The number " + rep + " is repeated " + finalc +" times");

これは印刷されます:

The number 6 is repeated 8 times
于 2015-08-06T19:25:24.817 に答える
0

これは最適化することができるアルゴリズムの質問です.....

同期されていないキーと値のストレージを使用します。キーには int を文字列として、値にはカウントします。

まず、次のように取得しようとします: hashMap.get("0") が null を返す場合、カウントが 0 である場合、元に戻す場合: hashMap.put("0", new Integer(1))。

必要がない場合を除き、hashMap の非同期バージョンを使用するよりも、Google で検索してください!

于 2012-12-08T04:04:53.307 に答える
0

Array.sort を使用して、それらを適切にカウントできます。

    int[] a = {0,1, 2, 1, 3, 0, 1 };
    int size = 0;
    int counter = 0;
    //sort it and you will get all the equal inters in a sequance.
    Arrays.sort(a);// {0,0,1,1,2,3}
    for(int i = 1; i < a.length; i++){          
        if ( a[i-1] == a[i]){
            counter++;
            if(counter  > size){
                size = counter;
            }
        }else{
            counter = 0;
        }
    }
    return size;
于 2012-12-08T10:55:11.977 に答える