根据身高重建队列

42 阅读1分钟

image.png

代码:

  1. 将原数组按一号元素降序,二号元素升序排列
  2. 遍历排序好的元素将他们按照自身二号元素的大小插入到相应的下标
  3. 这便是最终答案
  4. 因为一号元素是从大到小排列,所以先将前面的加入到ans中,因为后面的一号元素都比前面的一号元素小,所以即使将后面的插入前面,也不会影响先插入ans的元素
  5. 且因为,二号元素是升序排列,所以将小的二号元素先插入ans,不会影响之后插入的与它一号元素相同但二号元素大于它的值
func reconstructQueue(people [][]int) [][]int {
    ans := make([][]int,0)
    sort.Slice(people, func(i,j int) bool {
        a, b := people[i], people[j]
        return a[0] > b[0] || a[0] == b[0] && a[1] < b[1]
    })
    for _,v := range people {
        i := v[1]
        ans = append(ans[:i], append([][]int{v}, ans[i:]...)...)
    }
    return ans
}