C++の配列内のK-diffペア
配列と整数kがあるとすると、配列内の一意のk-diffペアの数を見つける必要があります。ここで、k-diffペアは(i、j)のようになります。ここで、iとjは両方とも配列に存在し、それらの絶対差はkです。
したがって、入力が[3,1,4,1,5]、k =2の場合、配列のような(1,3)と(の2つの2差分ペアがあるため、出力は2になります。 3,5)。
これを解決するには、次の手順に従います-
-
見た、完了したと呼ばれるマップを定義する
-
1つのセットを定義する
-
k <0の場合、-
-
0を返す
-
-
初期化i:=0の場合、i
-
(seen [nums [i]]を1増やします)
-
nums[i]をs
に挿入します
-
-
ans:=0
-
s内の要素ごとに、次のようにします-
-
kが0と同じ場合、-
-
見た場合[it]>1、次に-
-
(ansを1増やします)
-
-
-
それ以外の場合
-
done[it]を1増やします
-
(it + k)が表示されているが、実行されていない場合、-
-
(ansを1増やします)
-
-
(it --k)が表示されているが、実行されていない場合、-
-
(ansを1増やします)
-
-
-
-
ansを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h&g; using namespace std; class Solution { public: int findPairs(vector<int>& nums, int k) { map<int, int> seen, done; set<int> s; if (k < 0) return 0; for (int i = 0; i < nums.size(); i++) { seen[nums[i]]++; s.insert(nums[i]); } int ans = 0; for (auto it = s.begin(); it != s.end(); it++) { if (k == 0) { if (seen[*it] > 1) ans++; } else { done[*it]++; if (seen.find(*it + k) != seen.end() && done.find(*it + k) == done.end()) ans++; if (seen.find(*it - k) != seen.end() && done.find(*it - k) == done.end()) ans++; } } return ans; } }; main(){ Solution ob; vector<int> v = {3,1,4,1,5}; cout << (ob.findPairs(v, 2)); }
入力
{3,1,4,1,5}, 2
出力
2
-
文字列のC++配列
このセクションでは、C++で文字列の配列を定義する方法を説明します。私たちが知っているように、Cには文字列がありませんでした。文字配列を使用して文字列を作成する必要があります。したがって、文字列の配列を作成するには、文字の2次元配列を作成する必要があります。各行は、その行列に異なる文字列を保持しています。 C ++には、stringというクラスがあります。このクラスオブジェクトを使用すると、文字列型データを格納し、それらを非常に効率的に使用できます。オブジェクトの配列を作成できるので、文字列の配列を簡単に作成できます。 その後、文字列型のベクトルオブジェクトを作成し、それらを配列として使用
-
C++での並べ替え
このセクションでは、C++で並べ替えアルゴリズムを実行する方法を説明します。並べ替えられた配列は、各要素が数値、アルファベット順などの順序で並べ替えられた配列です。バブルソート、挿入ソート、選択ソート、マージソート、クイックソート、ヒープソートなど、数値配列をソートするための多くのアルゴリズムがあります。選択ソートを使用した配列のソートの詳細については、以下を参照してください。 選択ソートは、ソートされた配列を生成するソート方法です。これは、配列内の最小の要素を繰り返し見つけて、ソートされていない部分の先頭にある要素と交換することによって行われます。 選択ソートを使用してソートされた配列を