2023-09-14 Daily Challenge
Today I have done leetcode's September LeetCoding Challenge with cpp
.
September LeetCoding Challenge 14
Description
Reconstruct Itinerary
You are given a list of airline tickets
where tickets[i] = [fromi, toi]
represent the departure and the arrival airports of one flight. Reconstruct the itinerary in order and return it.
All of the tickets belong to a man who departs from "JFK"
, thus, the itinerary must begin with "JFK"
. 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"]
.
You may assume all tickets form at least one valid itinerary. You must use all the tickets once and only once.
Example 1:
Input: tickets = [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR","SFO"]] Output: ["JFK","MUC","LHR","SFO","SJC"]
Example 2:
Input: tickets = [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]] Output: ["JFK","ATL","JFK","SFO","ATL","SFO"] Explanation: Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"] but it is larger in lexical order.
Constraints:
1 <= tickets.length <= 300
tickets[i].length == 2
fromi.length == 3
toi.length == 3
fromi
andtoi
consist of uppercase English letters.fromi != toi
Solution
class Solution {
int target = 0;
void solve(
const string ¤t,
vector<string> &answer,
map<string, vector<string>> &neighbors
) {
while(neighbors[current].size()) {
string next = neighbors[current].back();
neighbors[current].pop_back();
solve(next, answer, neighbors);
}
answer.push_back(current);
}
public:
vector<string> findItinerary(vector<vector<string>>& tickets) {
target = tickets.size() + 1;
map<string, vector<string>> neighbors;
for(const auto &ticket : tickets) {
neighbors[ticket[0]].push_back(ticket[1]);
}
for(auto &[from, tos] : neighbors) {
sort(tos.rbegin(), tos.rend());
}
vector<string> answer;
solve("JFK", answer, neighbors);
reverse(answer.begin(), answer.end());
return answer;
}
};
// Accepted
// 80/80 cases passed (14 ms)
// Your runtime beats 92.9 % of cpp submissions
// Your memory usage beats 63.46 % of cpp submissions (14.4 MB)