文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
- LeetCode:55. Jump Game(跳远比赛)
- Leetcode:300. Longest Increasing Subsequence(最大增长序列)
- LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)
文章目录:
题目描述:
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例:
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
来源:力扣(LeetCode)
java实现方式1:
/**
* @param people 人序号
* @return 数组
*/
private int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);
List<int[]> res = new LinkedList<>();
for (int[] cur : people) {
res.add(cur[1], cur);
}
return res.toArray(new int[people.length][]);
}
时间复杂度:O(n^2)
空间复杂度:O(n)
python实现方式1:
def reconstruct_queue(people: List[List[int]]) -> List[List[int]]:
'''
重构队列
Args:
people: 人的排序
Returns:
重排之后的数组
'''
result = []
# 第一列逆序,如果相等第二列正序
people.sort(key=lambda x: (-x[0], x[1]))
for cur in people:
result.insert(cur[1], cur)
return result
时间复杂度:O(n^2)
空间复杂度:O(n)