C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の配列のすべてのサブセットの要素のAND間の最小値


問題の説明

整数の配列が与えられた場合、タスクは、配列の各サブセットのすべての要素のANDを見つけて、それらすべての中で最小のAND値を出力することです。

If arr[] = {1, 2, 3, 4, 5} then
(1 & 2) = 0
(1 & 3) = 1
(1 & 4) = 0
(1 & 5) = 1
(2 & 3) = 2
(2 & 4) = 0
(2 & 5) = 0
(3 & 4) = 0
(3 & 5) = 1
(4 & 5) = 4

アルゴリズム

  • 配列のサブセットの最小AND値は、配列のすべての要素のANDになります。
  • したがって、最も簡単な方法は、サブアレイのすべての要素のANDを見つけることです。

#include <bits/stdc++.h>
using namespace std;
int getMinAndValue(int *arr, int n) {
   int result = arr[0];
   for (int i = 1; i < n; ++i) {
      result = result & arr[i];
   }
   return result;
}
int main() {
   int arr[] = {1, 2, 3, 4, 5};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum value = " << getMinAndValue(arr, n) << endl;
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

出力

Minimum value = 0

  1. C++の配列内のすべての要素に最も近い大きい値を検索します

    ここでは、配列内のすべての要素に最も近い大きい値を見つける方法を説明します。要素xに、それよりも大きい次の要素があり、配列にも存在する場合、それはその要素のより大きな値になります。要素が存在しない場合は、-1を返します。配列要素が[10、5、11、6、20、12]であるとすると、大きい方の要素は[11、6、12、10、-1、20]になります。 20は配列内でそれ以上の値を持たないため、-1を出力します。 これを解決するために、C++STLのセットを使用します。セットは、バイナリツリーアプローチを使用して実装されます。二分木では、常に順序の後続が次に大きい要素です。したがって、O(log n)

  2. C++で配列のすべての要素を同じにするための最小限の削除操作。

    問題の説明 要素が繰り返されるようなn個の要素の配列が与えられます。配列から任意の数の要素を削除できます。タスクは、配列から削除する要素の最小数を見つけて、配列を等しくすることです。 arr[] = {10, 8, 10, 7, 10, -1, -4, 12} すべての配列要素を同じにするには、強調表示された5つの要素を削除する必要があります。 アルゴリズム 1. Count frequency of each element 2. Find maximum frequecy among the frequencies. Let us call this as maxFrequncy 3.