Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมดัชนีขั้นต่ำของสองรายการใน C++


สมมติว่ามีอมาลสองคนและบีมาลต้องการเลือกร้านอาหารสำหรับมื้อค่ำ ตอนนี้พวกเขาทั้งคู่มีรายชื่อร้านอาหารโปรดที่แสดงด้วยสตริง เราต้องช่วยพวกเขาค้นหาความสนใจร่วมกันโดยมีค่าดัชนีน้อยที่สุด หากมีตัวเลือกที่เท่ากันระหว่างคำตอบที่ต่างกัน ให้ส่งคืนทั้งหมดโดยไม่มีข้อกำหนดการสั่งซื้อ

ดังนั้น หากอินพุตเป็น ["ABC","PQR","MNO","XYZ"] และ ["TUV","GHI","KLM","ABC"] เอาต์พุตจะเป็น [ "เอบีซี"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่ง mp mp

  • น้อยที่สุด :=inf

  • สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาด l1 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -

    • สำหรับการเริ่มต้น j :=0 เมื่อ j <ขนาดของ l2 อัปเดต (เพิ่ม j ขึ้น 1) ให้ทำ -

      • ถ้า l1[i] เหมือนกับ l2[j] แล้ว −

        • ใส่ l1[i] ต่อท้าย mp[i + j]

  • กำหนดความละเอียดของอาร์เรย์

  • มัน =องค์ประกอบแรกของ 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, ]