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

C++の1つを除くすべての要素がk回出現する配列内の一意の要素


配列Aがあります。Aにはすべての要素がm回出現しますが、1つの要素は1回だけ出現します。そのユニークな要素を見つける必要があります。

したがって、入力がA =[6、2、7、2、2、6、6]、m =3の場合、出力は7になります。

これを解決するには、次の手順に従います-

  • INT_SIZE:=8*整数型変数のサイズ
  • サイズの配列カウントを定義します:INT_SIZE。 0で埋めます
  • iを初期化する場合:=0、i
  • jを初期化する場合:=0、j <サイズの場合、更新(jを1つ増やす)、実行-
    • (arr [j] AND 2 ^ i)が0に等しくない場合、-
      • count [i]:=count [i] + 1
    • res:=0
  • iを初期化する場合:=0、i
  • res:=res +((count [i] mod m)* 2 ^ i)
  • return res
  • 理解を深めるために、次の実装を見てみましょう-

    例(C ++)

    #include <bits/stdc++.h>
    using namespace std;
    int selectUnique(unsigned int arr[], int size, int m){
       int INT_SIZE = 8 * sizeof(unsigned int);
       int count[INT_SIZE];
       memset(count, 0, sizeof(count));
       for(int i = 0; i < INT_SIZE; i++)
          for(int j = 0; j < size; j++)
             if((arr[j] & (1 << i)) != 0)
                count[i] += 1;
       unsigned res = 0;
       for(int i = 0; i < INT_SIZE; i++)
          res += (count[i] % m) * (1 << i);
       return res;
    }
    main(){
       unsigned int arr[] = { 6, 2, 5, 2, 2, 6, 6 };
       int size = sizeof(arr) / sizeof(arr[0]);
       int m = 3;
       cout << selectUnique(arr, size, m);
    }

    入力

    { 6, 2, 5, 2, 2, 6, 6 }

    出力

    5

    1. 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.

    2. 配列内のすべてのペアワイズ連続要素の絶対差(C ++)?

      この問題では、配列内の要素の各ペアの要素間の絶対差を取得する方法を確認します。 n個の要素がある場合、結果の配列にはn-1個の要素が含まれます。要素が{8、5、4、3}であると仮定します。結果は|8-5|になります=3、次に| 5-4 | =1、| 4-3 |=1。 アルゴリズム pairDiff(arr、n) begin    res := an array to hold results    for i in range 0 to n-2, do       res[i] := |res[i] – res