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