HOT100-26-根据身高重建队列
题目描述
假设有打乱顺序的一群人站成一个队列,数组 people
表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki]
表示第 i
个人的身高为 hi
,前面 正好 有 ki
个身高大于或等于 hi
的人。
请你重新构造并返回输入数组 people
所表示的队列。返回的队列应该格式化为数组 queue
,其中 queue[j] = [hj, kj]
是队列中第 j
个人的属性(queue[0]
是排在队列前面的人)。
示例 1:
1 | 输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] |
具体见题目描述。
算法描述
这道题我确实没什么思路,最气人的是他竟然有70%多的通过率!!!我想了半天也没什么比较好的办法,最后只能去看题解。题目思路比较简单,我可以简单总结一下:你将一个当前最矮的人放进队列,他不会对后面的人产生影响,因为后面的人肯定都比他高;但是你把一个比较高的人放进队列,就会影响后面的人,因为后面的人都比他矮。
再后面就是官方思路:
如果我们在初始时建立一个包含 n 个位置的空队列,而我们每次将一个人放入队列中时,会将一个「空」位置变成「满」位置,那么当我们放入第 i 个人时,我们需要给他安排一个「空」位置,并且这个「空」位置前面恰好还有$k_i$个「空」位置,用来安排给后面身高更高的人。也就是说,第 i 个人的位置,就是队列中从左往右数第 $k_i+1$ 个「空」位置。看不懂就去看原链接。
1 | class Solution { |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.