Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tổng chỉ số nhỏ nhất của hai danh sách trong C++


Mô tả bài toán

Hai bạn có danh sách nhà hàng yêu thích (chuỗi). Tìm nhà hàng chung có tổng chỉ số (index) nhỏ nhất. Nếu tie, trả về tất cả.

Ví dụ: ["ABC","PQR","MNO","XYZ"] và ["TUV","GHI","KLM","ABC"] → Chung "ABC" tại chỉ số 0+3=3 → ["ABC"].

Giải pháp (Map lưu tổng chỉ số)

  • Duyệt cặp chỉ số (i,j) của 2 danh sách.
  • Nếu tên trùng → lưu vào map sum_index → list tên.
  • Trả về list tại key nhỏ nhất của map (map tự sắp xếp key).

Ví dụ minh họa

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<string> v) {
    cout << "[";
    for (string s : v) cout << s << ", ";
    cout << "]" << endl;
}

class Solution {
public:
    vector<string> findRestaurant(vector<string>& l1, vector<string>& l2) {
        map<int, vector<string>> mp;
        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]);
        return mp.begin()->second;
    }
};

int main() {
    Solution ob;
    vector<string> v = {"ABC","PQR","MNO","XYZ"}, v1 = {"TUV","GHI","KLM","ABC"};
    print_vector(ob.findRestaurant(v, v1));
    return 0;
}

Đầu vào

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

Đầu ra

[ABC, ]