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

C++での2つの配列の共通部分


2つの配列があるとします。それらの交差点を見つける必要があります。

したがって、入力が[1,5,3,6,9]、[2,8,9,6,7]の場合、出力は[9,6]

になります。

これを解決するには、次の手順に従います-

  • 2つのマップmp1、mp2を定義します

  • 配列解像度を定義する

  • nums1のxの場合

    • (mp1 [x]を1増やします)

  • nums2のxの場合

    • (mp2 [x]を1増やします)

  • mp1のキーと値のペアxごとに

    • cnt:=0

    • cnt:=xの最小値とmp2[xのキー]

    • cnt> 0の場合、-

      • resの最後にxのキーを挿入します

  • 解像度を返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
      unordered_map<int, int> mp1, mp2;
      vector<int> res;
      for (auto x : nums1)
         mp1[x]++;
      for (auto x : nums2)
         mp2[x]++;
      for (auto x : mp1) {
         int cnt = 0;
         cnt = min(x.second, mp2[x.first]);
         if (cnt > 0)
            res.push_back(x.first);
         }
         return res;
      }
};
main(){
   Solution ob;
   vector<int> v = {1,5,3,6,9}, v1 = {2,8,9,6,7};
   print_vector(ob.intersection(v, v1));
}

入力

{1,5,3,6,9},{2,8,9,6,7}

出力

[9, 6, ]

  1. C /C++の多次元配列

    C / C ++では、多次元配列は簡単な言葉で配列の配列として定義されます。多次元配列では、データは表形式で(行の主要な順序で)格納されます。次の図は、次元が3 x 3x3の多次元配列のメモリ割り当て戦略を示しています。 アルゴリズム Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print the ar

  2. C++での2つのリンクリストの交差

    リンクリストは線形データ構造であり、各ノードには2つのブロックがあり、一方のブロックにはノードの値またはデータが含まれ、もう一方のブロックには次のフィールドのアドレスが含まれます。 各ノードにリスト内の他のノードを指すランダムポインタが含まれるようなリンクリストがあると仮定します。タスクは、2つのリンクリストが互いに交差するノードを見つけることです。それらが交差しない場合は、出力としてNULLまたは空を返します。 例 入力-1: 出力: 2 説明: 指定されたリンクリストはノードで値「2」と交差するため、出力として値「2」を返します。 入力-2: 出