C++のDuplicateIIが含まれています
配列と整数kがあるとすると、配列にnums [i] =nums[j]となるような2つの異なるインデックスiとjがあるかどうかを確認する必要があります。 iとjの絶対差は最大でkです。
したがって、入力が[1,2,4,1]のようで、k =3の場合、出力はTrueになります
これを解決するには、次の手順に従います-
-
ペアの配列nnを定義します
-
初期化i:=0の場合、i − numsのサイズの場合、更新(iを1増やします)、do −
-
nnの最後に{nums[i]、i}を挿入します
-
-
配列nnを並べ替える
-
初期化i:=1の場合、i
-
nn[i]の最初の要素がnn[i-1]の最初の要素と同じで|nn[i]の2番目-nn[i-1]|の2番目の場合、-
-
trueを返す
-
-
-
falseを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { vector<pair<int, int> > nn; for (<) { nn.push_back(make_pair(nums[i], i)); } sort(nn.begin(), nn.end()); for (int i = 1; i < nn.size(); i++) { if (nn[i].first == nn[i - 1].first and abs(nn[i].second - nn[i - 1].second) <= k) return true; } return false; } }; main(){ Solution ob; vector<int> v = {1,2,4,1}; cout << (ob.containsNearbyDuplicate(v, 3)); }
入力
{1,2,4,1}
出力
1
-
C++で重複するすべてのサブツリーを検索する
二分木があると考えてください。ツリーに重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。各サブツリーD、BD、およびBEには、両方とも重複するサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。サブツリーの順序どおりの走査をハッシュテーブルに格納します。空のノードには開き括弧と閉じ括弧を挿入します。 例 #include <iostream> #include <unordered_set> #include <unordere
-
バイナリツリーに、C++でサイズ2以上の重複するサブツリーが含まれていないかどうかを確認します
二分木があると考えてください。ツリーにサイズ2以上の重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。アイデアは、サブツリーを文字列としてシリアル化し、ハッシュテーブルに格納することです。リーフではなく、ハッシュテーブルにすでに存在するシリアル化されたツリーを見つけたら、trueを返します。 例 #include <iostream> #include <unordered_set> using name