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

C++で配列内のすべての重複を検索


1≤a[i]≤n(n =配列のサイズ)の範囲の整数の配列があるとします。ここでは、一部の要素が2回表示され、他の要素が1回表示されます。この配列に2回現れるすべての要素を見つける必要があります。したがって、配列が[4,3,2,7,8,2,3,1]の場合、出力は[2、3]

になります。

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

  • n:=配列のサイズ、ansと呼ばれる1つの配列を作成します
  • 0からn–1の範囲のiの場合
    • x:=nums [i]
    • の絶対値
    • xを1減らします
    • nums [x] <0の場合は、x + 1をansに追加します。それ以外の場合は、nums [x]:=nums [x] *(-1)
  • 回答を返す
例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> findDuplicates(vector<int>& nums) {
      int n = nums.size();
      vector <int> ans;
      for(int i = 0; i < n; i++){
         int x = abs(nums[i]);
         x--;
         if(nums[x] < 0) ans.push_back(x + 1);
         else nums[x] *= -1;
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {4,3,2,7,8,2,3,1};
   print_vector(ob.findDuplicates(v));
}

入力

[4,3,2,7,8,2,3,1]

出力

[2,3]

  1. C++の配列内のすべてのペアの合計のXORの合計

    この問題では、サイズnの配列arr[]が与えられます。私たちのタスクは、配列内のすべてのペアの合計のXORの合計を見つけるプログラムを作成することです。 問題を理解するための例を見てみましょう。 入力: arr [5、7、9] 出力: 22 説明: (5 + 5)^(5 + 7)^(5 + 9)^(7 + 5)^(7 + 7)^(7 + 9)^(9 + 5)^(9 + 7) ^(9 + 9) =22 この問題の簡単な解決策は、ネストされたループを使用することです。そして、配列からすべての可能なペアを作成します。そして、各ペアの合計のXORを計算します。 アルゴリズム

  2. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7