C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++で重複するすべてのサブツリーを検索する

    二分木があると考えてください。ツリーに重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。各サブツリーD、BD、およびBEには、両方とも重複するサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。サブツリーの順序どおりの走査をハッシュテーブルに格納します。空のノードには開き括弧と閉じ括弧を挿入します。 例 #include <iostream> #include <unordered_set> #include <unordere

  2. バイナリツリーに、C++でサイズ2以上の重複するサブツリーが含まれていないかどうかを確認します

    二分木があると考えてください。ツリーにサイズ2以上の重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。アイデアは、サブツリーを文字列としてシリアル化し、ハッシュテーブルに格納することです。リーフではなく、ハッシュテーブルにすでに存在するシリアル化されたツリーを見つけたら、trueを返します。 例 #include <iostream> #include <unordered_set> using name