/ /最大AND演算の検索[終了]-Java、配列、アルゴリズム

最大AND演算を見つける[閉鎖] - java、配列、アルゴリズム

私は次のようなハッカーランクの問題に取り組んでいます:

問題は、包括的範囲[L、R]を見つけることです配列が降順で並べ替えられたときに、並べ替えられた範囲内の最初の2つの要素に対してAND演算を実行すると、そのようなすべての可能な結果の最大値が得られます。関数は、2つの整数の配列を返す必要があります。インデックス0には配列のL "のインデックスに対応する整数が含まれ、インデックス1には配列のR"のインデックスに対応する整数が含まれます。

有効な回答が1つ以上ある場合は、L値が最も低いものを選択します。 2つ以上の有効な回答のL値が同じ場合、最短の範囲にまたがる回答を選択します。

例array = {6,3,6}

出力は0,2である必要があります

説明:ソートされたときに{6,6,3}になる{6,6,3}になる範囲[0,2]について。次に、AND演算6&6により、可能な限り最大の答えが得られます。したがって、結果は[0,2]になります。

私はこの問題を試してみましたが、以下の答えがありました:

static int[] process(int[] array) {
int max=0;
List<Integer[]> list = new ArrayList<>();
Integer[] index = new Integer[2];
for (int i = 0; i < array.length; i++) {
for(int j =i+1 ; j <= array.length -1 ; j++){
int z = array[i] & array[j];
if(z > max){
max=z;
index[0] = i;
index[1] = j;
list.add(index);
}
}
}
int[] result = new int[2];
result[0] = index[0];
result[1] = index[1];
int least = result[0] - result[1];
for(int i=1; i< list.size(); i++) {
Integer[] data = list.get(i);
int temp = index[0] - index[1];
if(temp < least) {
least = temp;
result[0] = index[0];
result[1] = index[1];
}
}

return result;
}

このプログラムは、一部のテストケースのみに合格しています。このプログラムの問題を把握することはできません。私を助けてください。

回答:

回答№1は1

コードは、2つの値のすべての組み合わせをANDして、最大値を見つけます。 間違って そのような最大のコンボは、その間の範囲で2つの最大値を選択する必要がある場合、変更されないままになると結論付けます。

例えば。入力用 6,2,8,6、あなたはそれを結論付けた 6&6 = 6 が最大で、答えは [0,3] => 8,6,6,2 => 8&6 = 0 (おっとっと!)、while [0,1] => 6,2 => 6&2 = 2 正しい答えです。

ロジックの前提に欠陥があります。もう一度考え直してください。