golang力扣leetcode 406.根据身高重建队列

简介: golang力扣leetcode 406.根据身高重建队列

406.根据身高重建队列

406.根据身高重建队列

题解

题目:给定一个打算的<身高,前面有k个人身高大于等于自己>的数组,返回一个按照<身高,前面有k个人身高大于等于自己>要求排列的数组

思路:

1.一般这种数对的数组,都是按照第一个排序,第二个反着排序
2.这里看到要求是,前面有k个身高大于等于自己的人
3.那么先对身高进行降序,对k进行升序
因为 “有k个身高大于等于自己的人”这个条件,那么必定对于每个人来说
前面的人身高都比自己高,对k升序,是因为希望身高相等的人,k大的排在后面,这样比较容易满足条件
4.遍历这个排序后的数组,将idx=k,接下来分析位置
  如果是第一个人,身高必定是最高,他的k必定是0,因为没有比他身高还高的
    那么把他插入到ans[idx]的地方
  如果不是第一个人,他需要被安排在第idx个位置,这样他前面就有idx个人,就满足k个人比他高了
  但是我们插入数组都是一个一个插的,刚开始是没有位置的,所以需要append
  将当前数组分为 ans[:idx]和ans[idx:],将当前插入两个中间
  变成ans=ans[:idx] + curPersion + ans[idx:]
5.那么会不会影响ans[:idx],ans[idx:]这些人呢?
  对于ans[:idx]来说,cur比他们都矮,没影响
  对于ans[idx:]来说,cur在他们后面插入,所以ans[idx:]都是比cur高的
    矮的人排高的人前面,不影响k,所以没影响

代码

func reconstructQueue(people [][]int) [][]int {
  sort.Slice(people, func(i, j int) bool {
    return people[i][0] > people[j][0] || people[i][0] == people[j][0] && people[i][1] < people[j][1]
  })
  ans := make([][]int, 0)
  for _, v := range people {
    idx := v[1]
    ans = append(ans[:idx], append([][]int{v}, ans[idx:]...)...)
  }
  return ans
}
目录
相关文章
|
24天前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
20天前
|
存储 算法 Python
二刷力扣--栈和队列
二刷力扣--栈和队列
|
2天前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
4 0
|
2天前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
6 0
|
21天前
|
容器
【LeetCode刷题】栈和队列题目练习~
【LeetCode刷题】栈和队列题目练习~
|
24天前
|
算法 数据可视化 数据挖掘
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
|
24天前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 IV
LeetCode 力扣题目:买卖股票的最佳时机 IV
|
24天前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 III
LeetCode 力扣题目:买卖股票的最佳时机 III
|
20天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
20天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题