LeetCode No332. Reconstruct Itinerary
来源:互联网 发布:安卓4.0淘宝 编辑:程序博客网 时间:2024/06/08 06:37
1. 题目描述
Given a list of airline tickets represented by pairs of departure and arrival airports [from, to], reconstruct the itinerary in order. All of the tickets belong to a man who departs from JFK. Thus, the itinerary must begin with JFK.
Note:
If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string. For example, the itinerary [“JFK”, “LGA”] has a smaller lexical order than [“JFK”, “LGB”].
All airports are represented by three capital letters (IATA code).
You may assume all tickets form at least one valid itinerary.
Example 1:
tickets = [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]Return ["JFK", "MUC", "LHR", "SFO", "SJC"].
Example 2:
tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]Return ["JFK","ATL","JFK","SFO","ATL","SFO"].Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"]. But it is larger in lexical order.
2. 思路
- 将航线抽象建模为一个图,则题目的意思为 找出一条航线其可以由所有的票连接而成,若有多条,则选取字典序最小的那条航线。
- 航线的起点为”JFK”节点,当一个节点的出度为0时,其必定为航线的终点。
- 由于邻接边用multiset表示,当前的票已经排序,所以深度遍历时,只要存在边被遍历完,则必然是字典序最小的那条。
3. 代码及复杂度分析
class Solution {public: vector<string> findItinerary(vector<pair<string, string>> tickets) { map<string, multiset<string>> targets; for (auto ticket : tickets) targets[ticket.first].insert(ticket.second); vector<string> itenary; stack<string> s; s.push("JFK"); while (!s.empty()) { string curr_airport = s.top(); if (targets[curr_airport].empty()) { itenary.push_back(curr_airport); s.pop(); } else { s.push(*(targets[curr_airport].begin())); targets[curr_airport].erase(targets[curr_airport].begin()); } } reverse(itenary.begin(), itenary.end()); return itenary; }};
4. 参考链接
- https://leetcode.com/discuss/85439/short-iterative-solution-explanation-recursive-backtracking
0 0
- LeetCode No332. Reconstruct Itinerary
- leetcode Reconstruct Itinerary
- *[LeetCode]332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- [LeetCode 332] Reconstruct Itinerary
- LeetCode 332 : Reconstruct Itinerary
- leetcode笔记:Reconstruct Itinerary
- LeetCode *** 332. Reconstruct Itinerary
- leetcode reconstruct-itinerary
- LeetCode 332. Reconstruct Itinerary
- 【Leetcode】Reconstruct Itinerary
- leetcode 332 Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- LeetCode[332] Reconstruct Itinerary
- [leetcode] 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- [LeetCode] Reconstruct Itinerary
- java通过JDBC链接SQLServer2012
- JAVA操作Excel文件
- UVA 10099 - The Tourist Guide
- Iterator
- 获取手机分辨率(屏幕大小)
- LeetCode No332. Reconstruct Itinerary
- Java多线程初探——正确停止线程
- hdu5652 India and China Origins(并查集联通)
- 解决InvalidDataAccessApiUsageException: Executing an update/delete query
- 2016.06.04 教学妹弄gephi遇到的一些问题
- XTU Binary Search Tree(LIS变形)
- linux网络协议栈内核分析
- 中间件的简要概述
- Tamura纹理特征的matlab实现