Skip to content

Files

Latest commit

 

History

History
69 lines (51 loc) · 2.9 KB

332-reconstruct-itinerary.md

File metadata and controls

69 lines (51 loc) · 2.9 KB

332. Reconstruct Itinerary - 重新安排行程

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。

说明:

  1. 如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前
  2. 所有的机场都用三个大写字母表示(机场代码)。
  3. 假定所有机票至少存在一种合理的行程。

示例 1:

输入: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
输出: ["JFK", "MUC", "LHR", "SFO", "SJC"]

示例 2:

输入: [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
输出: ["JFK","ATL","JFK","SFO","ATL","SFO"]
解释: 另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"]。但是它自然排序更大更靠后。

题目标签:Depth-first Search / Graph

题目链接:LeetCode / LeetCode中国

题解

Language Runtime Memory
cpp 12 ms 978.9 KB
class Solution {
public:
    vector<string> findItinerary(vector<pair<string, string>> tickets) {
        unordered_map<string, multiset<string> > G;
        for (auto t : tickets) {
            G[t.first].insert(t.second);
        }
        vector<string> res;
        vector<string> s;
        s.push_back("JFK");
        while (!s.empty()) {
            string port = s.back();
            if (G[port].empty()) {
                res.push_back(port);
                s.pop_back();
            } else {
                s.push_back(*G[port].begin());
                G[port].erase(G[port].begin());
            }
        }
        reverse(res.begin(), res.end());
        return res;
    }
};
static auto _ = [](){ ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();