私は配列を持っていますが、私の目的は、11の倍数のスペースの数を調べることです。配列はソートされません。現在均等に配置されている要素の最大数を確認する方法は?
Such as [27, 16, 52, 84], this would return 2
[1, 55, 66, 33] should return 3.
[99, 8, 52, 32] should return 0
私が持っていることは、基本的に配列にするために、各素子を介して実行することである11を乗じて他のすべての要素をチェックしかし、これはO(n²)実行時に私を残し、とにかく私はこれを最適化することができます?
static int eval(int [] a) {
int i, j, k, counter = 0;
for (i = 0; i < a.length; i++) {
for (j = 0; j < a.length; j++) {
if (i != j) {
for (k = -9; k < 10; k++) {
if (a[i] == a[j] + k*11) {
counter++;
break;
}
}
}
}
}
//if found nothing, will return 0, if found 1 matching,
//it should be 2 numbers that share this 11-difference.
return counter : counter == 0? 0: counter + 1;
}
ありがとうございます!
それぞれのペアを1つずつチェックする必要があります。 2ループ未満にすることはできません。 –
まだ - 最初の例は16と27しかありません。他のペアは何ですか? –
ええ、私はそれをどのくらいの数のNUMBERSが11の違いを共有していると言いましょうかと思います。 16と27は2つの数字なので、2 – bZhang