C++での2倍のペアの配列
整数Aの配列が偶数の長さであるとすると、A [2 * i + 1] =2 * A [2 * i]のように並べ替えることができる場合に限り、trueと言わなければなりません。 for every 0 <=i
これを解決するには、次の手順に従います-
-
マップm、n:=Aのサイズを作成し、Aの各要素の頻度をマップmに保存します
-
cnt:=Aのサイズ
-
マップ内のキーと値のペアkvごとに
-
m[kvのキー]>0の場合、
-
m [kvのキー]が0でなく、m[2*kvのキー]>0
の場合-
x:=m[kvのキー]とm[2*kvのキー]の最小値
-
cnt:=cnt –(x * 2)
-
m [2*kvのキー]をxだけ減らします
-
m[kvのキー]をxだけ減らします
-
-
それ以外の場合、kv =0のキーの場合、
-
cnt:=cnt –m[kvのキー]
-
m [kvのキー]:=0
-
-
-
-
cntがゼロ以外の場合はfalseを返し、それ以外の場合はtrueを返します
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool canReorderDoubled(vector<int>& A) { map <int, int> m; int n = A.size(); for(int i = 0; i < n; i++){ m[A[i]]++; } int cnt = A.size(); map <int, int> :: iterator it = m.begin(); while(it != m.end()){ if(m[it->first] > 0){ if(it->first != 0 && m[it->first * 2] > 0){ int x = min(m[it->first], m[it->first * 2]); cnt -= (x * 2); m[it->first * 2] -= x; m[it->first] -= x; }else if(it->first == 0){ cnt -= m[it->first]; m[it->first] = 0; } } it++; } return !cnt; } }; main(){ vector<int> v1 = {3,1,3,6}; Solution ob; cout << (ob.canReorderDoubled(v1)) << endl; v1 = {4,-2,2,-4}; cout << (ob.canReorderDoubled(v1)); }
入力
[3,1,3,6] [4,-2,2,-4]
出力
0 1
-
文字列のC++配列
このセクションでは、C++で文字列の配列を定義する方法を説明します。私たちが知っているように、Cには文字列がありませんでした。文字配列を使用して文字列を作成する必要があります。したがって、文字列の配列を作成するには、文字の2次元配列を作成する必要があります。各行は、その行列に異なる文字列を保持しています。 C ++には、stringというクラスがあります。このクラスオブジェクトを使用すると、文字列型データを格納し、それらを非常に効率的に使用できます。オブジェクトの配列を作成できるので、文字列の配列を簡単に作成できます。 その後、文字列型のベクトルオブジェクトを作成し、それらを配列として使用
-
C++での並べ替え
このセクションでは、C++で並べ替えアルゴリズムを実行する方法を説明します。並べ替えられた配列は、各要素が数値、アルファベット順などの順序で並べ替えられた配列です。バブルソート、挿入ソート、選択ソート、マージソート、クイックソート、ヒープソートなど、数値配列をソートするための多くのアルゴリズムがあります。選択ソートを使用した配列のソートの詳細については、以下を参照してください。 選択ソートは、ソートされた配列を生成するソート方法です。これは、配列内の最小の要素を繰り返し見つけて、ソートされていない部分の先頭にある要素と交換することによって行われます。 選択ソートを使用してソートされた配列を