|
@@ -1,3 +1,31 @@
|
|
|
+type StringSlice []string
|
|
|
+
|
|
|
+func (ss StringSlice) Len() int { return len(ss) }
|
|
|
+func (ss StringSlice) Less(i, j int) bool { return ss[i] < ss[j] }
|
|
|
+func (ss StringSlice) Swap(i, j int) { ss[i], ss[j] = ss[j], ss[i] }
|
|
|
+
|
|
|
+func (ss *StringSlice) Push(x interface{}) {
|
|
|
+ *ss = append(*ss, x.(string))
|
|
|
+}
|
|
|
+
|
|
|
+func (ss *StringSlice) Pop() interface{} {
|
|
|
+ top := (*ss)[ss.Len()-1]
|
|
|
+ *ss = (*ss)[:ss.Len()-1]
|
|
|
+ return top
|
|
|
+}
|
|
|
+
|
|
|
func findItinerary(tickets [][]string) []string {
|
|
|
-
|
|
|
+ idx := make(map[string]int)
|
|
|
+ adj := make([][]StringSlice, 0)
|
|
|
+ for i := 0; i < len(tickets); i++ {
|
|
|
+ if id, ok := idx[tickets[i][0]]; !ok {
|
|
|
+ id = len(idx)
|
|
|
+ adj[id] = []StringSlice{tickets[i][1]}
|
|
|
+ idx[tickets[i][0]] = id
|
|
|
+ } else {
|
|
|
+ heap.Push(&adj[id], tickets[i][1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return []string{}
|
|
|
}
|
|
|
+
|