配列が与えられた問題を解決するには、少なくとも空でない部分配列のビット単位の AND であるすべての可能な整数を見つける必要があります (例: -
Input : nums[ ] = { 3, 5, 1, 2, 8 } Output : { 2, 5, 0, 3, 8, 1 } Explanation: 2 is the bitwise AND of subarray {2}, 5 is the bitwise AND of subarray {5}, 0 is the bitwise AND of subarray {1, 2}, {2, 8} and {1, 2, 8}, 3 is the bitwise AND of subarray {3}, 8 is the bitwise AND of subarray {8}, 1 is the bitwise AND of subarray {1}, {3, 5} and {3, 5, 1}. Input : nums[ ] = { 2, 6, 3, 8, 1 } Output: { 1, 8, 3, 6, 2, 0 }
適用できる 簡単な方法 は、
考えられる空でない部分配列をすべて見つけることです。
配列を走査するときは、部分配列内の各要素のビット単位の AND を計算します。
値の重複を避けるために、すべての結果をコレクションに保存します。
#include <bits/stdc++.h> using namespace std; int main(){ int arr[] ={ 2, 6, 3, 8, 1 }; int n = sizeof(arr) / sizeof(arr[0]); // Declaring set to store result of each AND operation. unordered_set<int> result; int val; // nested loops to traverse through all the possible non empty subarrays. for (int i = 0; i < n; ++i){ for (int j = i, val = INT_MAX; j < n; ++j){ val = val & arr[j]; // storing result of AND operation result.insert(val); } } cout << "All possible numbers are: "; // printing all the values of set. for (auto i = result.begin(); i != result.end();i++) cout << *i << " "; return 0; }
All possible numbers are: 1 8 3 6 0 2
設定された状態はすべての AND を格納します操作の結果。
AND 演算ではすべてのビットを 1 に設定する必要があるため、INT_MAX を使用して「val」変数を初期化します。
内部ループは、i 番目のインデックス内のすべての可能なサブ配列を反復処理します。
要素を相互に関連付け、また要素自体を関連付けます。 AND 演算を実行し、結果セットに格納します。
すべて印刷
このチュートリアルでは、この問題を解決する簡単な方法について説明しました。 AND 演算の可能な各部分配列を計算します。この問題を解決するための C プログラムについても説明しました。また、このコードは Java、C、Python などの他の言語でも作成できます。このチュートリアルがお役に立てば幸いです。
以上がC++ で記述された少なくとも 1 つの空でない部分配列を含む数値のビット単位の ANDの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。