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

C++での2つのリストの最小インデックス合計


アマルとビマルが夕食にレストランを選びたいという2人の悪鬼がいるとしましょう。今では、どちらも文字列で表されたお気に入りのレストランのリストを持っています。私たちは、リストのインデックスの合計が最小になるように、彼らが共通の関心を見つけるのを支援する必要があります。異なる回答の間に選択の同点がある場合は、注文を必要とせずにすべてを返します。

したがって、入力が["ABC"、 "PQR"、 "MNO"、 "XYZ"]、および["TUV"、 "GHI"、 "KLM"、 "ABC"]の場合、出力は[ 「ABC」]

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

  • 1つのマップmpを定義する

  • 最小:=inf

  • 初期化i:=0の場合、i

    • 初期化j:=0の場合、j

      • l1[i]がl2[j]と同じ場合、-

        • mp [i + j]

          の最後にl1[i]を挿入します
  • 配列解像度を定義する

  • it=mpの最初の要素

  • res:=その値

  • 解像度を返す

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

#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<string> findRestaurant(vector<string>& l1, vector<string>& l2) {
      map<int, vector<string> > mp;
      int least = INT_MAX;
      for (int i = 0; i < l1.size(); i++)
         for (int j = 0; j < l2.size(); j++)
            if (l1[i] == l2[j])
               mp[i + j].push_back(l1[i]);
      vector<string> res;
      auto it = mp.begin();
      res = it->second;
      return res;
   }
};
main(){
   Solution ob;
   vector<string> v = {"ABC","PQR","MNO","XYZ"}, v1 = {"TUV","GHI","KLM","ABC"};
   print_vector(ob.findRestaurant(v, v1));
}

入力

{"ABC","PQR","MNO","XYZ"}, {"TUV","GHI","KLM","ABC"}

出力

[ABC, ]

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

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

  2. TwoSumIV-入力はC++のBSTです

    二分探索木と1つのターゲット値があるとします。合計が指定されたターゲットと等しくなるように、BSTに2つの要素が存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります。 これを解決するには、次の手順に従います- 配列を定義するv 関数inorder()を定義します。これはルートになります ルートがnullの場合、- 戻る 順序なし(ルートの左側) ルートの値をvに挿入 順序なし(ルートの左側) 関数findnode()を定義します。これにはkがかかります n:=vのサ