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
}
目录
相关文章
|
2月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
2月前
【LeetCode 24】225.用队列实现栈
【LeetCode 24】225.用队列实现栈
12 0
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
90 0
|
2月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
31 0
|
2月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
53 0
|
2月前
|
算法
【LeetCode 23】232.用栈实现队列
【LeetCode 23】232.用栈实现队列
21 0
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 09. 用两个栈实现队列
使用两个栈实现队列的Python解决方案,包括初始化两个栈、实现在队列尾部添加整数的appendTail方法和在队列头部删除整数的deleteHead方法,以及相应的示例操作。
41 2
|
4月前
|
Python
【Leetcode刷题Python】641.循环双端队列
文章介绍了如何实现一个循环双端队列,包括其操作如插入、删除、获取队首和队尾元素,以及检查队列是否为空或已满,并提供了Python语言的实现代码。
25 0
|
4月前
|
Python
【Leetcode刷题Python】232. 用栈实现队列
如何使用Python语言通过两个栈来实现队列的所有基本操作,包括入队(push)、出队(pop)、查看队首元素(peek)和判断队列是否为空(empty),并提供了相应的代码实现。
22 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行