ปัญหา
สมมติว่ามีเพื่อนสองคนคือ Amal และ Bimal ต้องการเลือกร้านอาหารสำหรับมื้อเย็น ตอนนี้ทั้งคู่มีรายการร้านอาหารโปรดแทนด้วยสตริง เราต้องช่วยพวกเขาหาสิ่งที่ทั้งคู่ชอบซึ่งมีผลรวมดัชนีของรายการน้อยที่สุด หากมีทางเลือกที่เท่ากันระหว่างคำตอบที่ต่างกัน ให้คืนค่าทั้งหมดโดยไม่มีข้อกำหนดเรื่องลำดับ
เช่น ถ้าผนวกเข้าเป็น ["ABC","PQR","MNO","XYZ"] และ ["TUV","GHI","KLM","ABC"] ผลลัพธ์จะเป็น ["ABC"]
วิธีแก้ปัญหา
- กำหนด map mp หนึ่งอัน
- least := inf
- for i := 0 ถึง ขนาดของ l1 - 1 ทำ:
- for j := 0 ถึง ขนาดของ l2 - 1 ทำ:
- ถ้า l1[i] เท่ากับ l2[j]:
- เพิ่ม l1[i] เข้าไปท้าย mp[i + j]
- ถ้า l1[i] เท่ากับ l2[j]:
- for j := 0 ถึง ขนาดของ l2 - 1 ทำ:
- กำหนดอาร์เรย์ res
- it = สมาชิกแรกของ mp
- res := value ของ it
- คืนค่า res
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
cout << "[";
for(int i = 0; isecond;
return res;
}
};
int 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, ]