Given a list of tickets, find itinerary in order using the given list.
Input: "Chennai" -> "Banglore" "Bombay" -> "Delhi" "Goa" -> "Chennai" "Delhi" -> "Goa" Output: Bombay->Delhi, Delhi->Goa, Goa->Chennai, Chennai->Banglore,
It may be assumed that the input list of tickets is not cyclic and there is one ticket from every city except final destination.
One Solution is to build a graph and do Topological Sorting of the graph. Time complexity of this solution is O(n).
We can also use hashing to avoid building a graph. The idea is to first find the starting point. A starting point would never be on ‘to’ side of a ticket. Once we find the starting point, we can simply traverse the given map to print itinerary in order. Following are steps.
1) Create a HashMap of given pair of tickets. Let the created HashMap be 'dataset'. Every entry of 'dataset' is of the form "from->to" like "Chennai" -> "Banglore" 2) Find the starting point of itinerary. a) Create a reverse HashMap. Let the reverse be 'reverseMap' Entries of 'reverseMap' are of the form "to->form". Following is 'reverseMap' for above example. "Banglore"-> "Chennai" "Delhi" -> "Bombay" "Chennai" -> "Goa" "Goa" -> "Delhi" b) Traverse 'dataset'. For every key of dataset, check if it is there in 'reverseMap'. If a key is not present, then we found the starting point. In the above example, "Bombay" is starting point. 3) Start from above found starting point and traverse the 'dataset' to print itinerary.
All of the above steps require O(n) time so overall time complexity is O(n).
Below is Java implementation of above idea.
Bombay->Delhi, Delhi->Goa, Goa->Chennai, Chennai->Banglore,
This article is compiled by Rahul Jain. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
- Count divisible pairs in an array
- Top 20 Hashing Technique based Interview Questions
- Check if an array can be divided into pairs whose sum is divisible by k
- Find four elements a, b, c and d in an array such that a+b = c+d
- Find the length of largest subarray with 0 sum
- Longest Consecutive Subsequence
- Count distinct elements in every window of size k
- Hashing | Set 2 (Separate Chaining)
- Find number of Employees Under every Employee
- Check if a given array contains duplicate elements within k distance from each other
- Length of the largest subarray with contiguous elements | Set 2
- Hashing | Set 1 (Introduction)
- Print a Binary Tree in Vertical Order | Set 2 (Map based Method)
- Find whether an array is subset of another array | Added Method 3
- Given an array A and a number x, check for pair in A with sum as x