332.reconstruct-itinerary.go 758 B

12345678910111213141516171819202122232425262728293031
  1. type StringSlice []string
  2. func (ss StringSlice) Len() int { return len(ss) }
  3. func (ss StringSlice) Less(i, j int) bool { return ss[i] < ss[j] }
  4. func (ss StringSlice) Swap(i, j int) { ss[i], ss[j] = ss[j], ss[i] }
  5. func (ss *StringSlice) Push(x interface{}) {
  6. *ss = append(*ss, x.(string))
  7. }
  8. func (ss *StringSlice) Pop() interface{} {
  9. top := (*ss)[ss.Len()-1]
  10. *ss = (*ss)[:ss.Len()-1]
  11. return top
  12. }
  13. func findItinerary(tickets [][]string) []string {
  14. idx := make(map[string]int)
  15. adj := make([][]StringSlice, 0)
  16. for i := 0; i < len(tickets); i++ {
  17. if id, ok := idx[tickets[i][0]]; !ok {
  18. id = len(idx)
  19. adj[id] = []StringSlice{tickets[i][1]}
  20. idx[tickets[i][0]] = id
  21. } else {
  22. heap.Push(&adj[id], tickets[i][1])
  23. }
  24. }
  25. return []string{}
  26. }