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)
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
#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]
-
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を計算します。 アルゴリズム
-
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