12345678910111213141516171819202122232425262728293031 |
- 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{}
- }
|