406. 根据身高重建队列
程序员文章站
2022-04-17 13:26:14
...
题目:
题解:
/**
* 解题思路:先排序再插入
* 1.排序规则:先按照高度 H 降序排序,再按照 K 个数升序排序(if the heights are equal, compare k-values)
* 2.遍历排序后的数组,根据 K 插入到 K 的位置上
*
* 核心思想:高个子先站好位,矮个子插入到 K 位置上,前面肯定有 K 个高个子,矮个子再插到前面也满足 K 的要求
*
* @param people
* @return
*/
代码:
import java.util.*;
public class code406 {
public static int[][] reconstructQueue(int[][] people) {
// 排序规则:先按照高度 H 降序排序,再按照 K 个数升序排序
// if the heights are equal, compare k-values
Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1]: o2[0] - o1[0]);
List<int []> list = new LinkedList<>();
// 遍历排序后的数组,根据 K 插入到 K 的位置上
for(int person[]: people)
{
// System.out.print("[" + person[0] + "," + person[1] + "]" + " ");
int k = person[1];
list.add(k, person);
}
// 转化为数组
return list.toArray(people);
}
public static void main(String[] args) {
int people[][] = { { 7, 0 }, { 4, 4 }, { 7, 1 }, { 5, 0 }, { 6, 1 }, { 5, 2 } };
int res[][] = reconstructQueue(people);
System.out.println();
for(int i = 0; i < res.length; i++)
{
System.out.print("[" + res[i][0]+ "," + res[i][1] + "]" + " ");
}
System.out.println();
}
}
参考:
附:Java中Arrays.sort()自定义数组的升序和降序排序
// o1 - o2 是升序排序,o2 - o1 是降序排序
Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1]: o2[0] - o1[0]);
上一篇: 406. 根据身高重建队列