forked from DengWangBao/Leetcode-Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueueReconstructionByHeight.java
45 lines (41 loc) · 1.89 KB
/
QueueReconstructionByHeight.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
* 这题核心思路是:
* 1,先取出高度最高的那一组,如果有若干个高度相同的,则按k升序排列,这就是他们之后的相对顺序了。
* 2,排除刚取出的那些组,从剩余的组中再取出最高的,仍按k升序排列,然后依次插入
* <p>
* 这题核心思路是:
* 1,先取出高度最高的那一组,如果有若干个高度相同的,则按k升序排列,这就是他们之后的相对顺序了。
* 2,排除刚取出的那些组,从剩余的组中再取出最高的,仍按k升序排列,然后依次插入
*/
/**
* 这题核心思路是:
* 1,先取出高度最高的那一组,如果有若干个高度相同的,则按k升序排列,这就是他们之后的相对顺序了。
* 2,排除刚取出的那些组,从剩余的组中再取出最高的,仍按k升序排列,然后依次插入
*/
/**
* 为什么要这么做呢?先处理较高的,相对顺序就固定了,再往里插较低的时也不会影响较高的组的k值。
* 而高度相同的组,往前排的k肯定会更小,所以我们按k的升序排好就是他们最后的相对顺序了。
*/
public class QueueReconstructionByHeight {
// [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
// [7,0], [7,1], [6,1], [5,0], [5,2], [4,4]
// [5,0], [7,0], [5,2], [6,1], [4,4], [7,1]
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] != o2[0] ? o2[0] - o1[0] : o1[1] - o2[1];
}
});
List<int[]> res = new LinkedList<>();
for (int[] cur : people) {
res.add(cur[1], cur);
}
return res.toArray(new int[people.length][]);
}
}