LeetCode 406. 根据身高重建队列
题目链接
题目思路
这个题给了我们一个二维数组,第二维的含义有两个:
- 第
i
个人的身高。 - 在队列中,第
i
个人前面有arr[i][1]
个人的身高大于或等于自己。
那么这个有点像那个广告牌的做法。首先我们先将数组进行排序,排序规则如下:
- 如果两者身高相等,那就按照大于或等于自己身高的人的数量进行升序排序。
- 否则按照身高降序排序。
然后我们利用一个List
来插入数据。
插入规则是按照arr[i][1]
作为插入坐标,进行插入。
因为我们在插入数据的过程中,按照身高降序插入。当我们遇到第i
个人的时候,他已经是当前剩余人数中最高的那一个了。那么我们在List
中的第arr[i][1]
个位置插入这个人,就可以确保这个人在队列中前面身高大于或等于自己的的数据是正确的。
代码实现
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, (o1, o2) -> {
return o1[0] == o2[0]? o1[1] - o2[1] : o2[0] - o1[0];
});
List<int[]> list = new ArrayList<>();
for(int[] x : people){
list.add(x[1], x);
}
int[][] res = new int[people.length][2];
for(int i = 0; i < list.size(); i++){
res[i] = list.get(i);
}
return res;
}
}