思维题
其实答案隐藏在题目里:
每个people[i] = [hi, ki]表示第i个人的身高为hi,前面正好有ki个身高大于或等于hi的人。
- 前面正好有
ki个身高大于或等于hi的人:说明应该将身高从高到低排序,而不是低到高排序。 - 身高相同:因为是身高大于或等于,所以按照
ki小到大排序。 ki提前设计好的,按照ki进行索引插入即可。
class Solution {
public int[][] reconstructQueue(int[][] people) {
// 先按身高从高到低排好,身高相同再按第二个数从小到大排序
Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
// 使用List方便插入
List<int[]> res = new ArrayList<>();
for (int[] person : people) {
res.add(person[1], person);
}
return res.toArray(new int[res.size()][]);
}
}