贪心算法
按照身高排序
// 根据身高排队,当遇到两个维度数据时,需要先进行一个维度的排序,再考虑另一个
func QueueByHeight(people [][]int) [][]int {
sort.Slice(people, func(i, j int) bool {
if people[i][0] == people[j][0]{
return people[i][1] < people[j][1]
}
return people[i][0] > people[j][0]
})
fmt.Printf("after sort is %v\n", people)
// 数组方式,耗时较久
//queue := make([][]int, len(people))
//for _, value := range people {
// 后移一位,腾出空间
// copy(queue[value[1]+1:], queue[value[1]:])
// queue[value[1]] = value
//}
// 链表方式,灵活插入
link := list.New()
queue := make([][]int, 0)
for _, value := range people {
position := value[1]
ev := link.PushBack(value)
fr := link.Front()
for position != 0 {
position--
fr = fr.Next()
}
link.MoveBefore(ev, fr)
}
for e := link.Front(); e != nil; e=e.Next() {
queue = append(queue, e.Value.([]int))
}
return queue
}