2021.05.06根据身高重建队列

本文介绍了一道来自LeetCode的算法题——根据身高重建队列。通过详细解释题目要求及提供Java代码实现,展示了如何对人群进行排序并重建符合特定条件的队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021.05.06根据身高重建队列

(题目来源:leetcode)

题目描述

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

代码

	public int[][] reconstructQueue(int[][] people) {
		//按照x[0]降序,按照x[1]升序
		//按照身高降序,按照人数升序
		Arrays.sort(people, new Comparator<int[]>() {
			public int compare(int[] o1, int[] o2) {
				return o1[0]==o2[0] ? o1[1]-o2[1] : o2[0]-o1[0];
			}
		});
		//1.排序后整体是按照“高的在前,矮的在后”排序。
		//2.身高高的先进行调整。
		//3.身高相同的按照x[1]降序进行插入。
		//4.每次都按照:当身高高的一批已经调整完成,再调整矮的一批时,
		//	矮的一批无论如何调整都不会影响之前一批的正确性,只需要按照x[1]进行插入即可。
		//	即,如果x[1]为2,那么将其插入第二个位置即可。(前面的两个人p[0],p[1]要么比他高,要么一样高)
		List<int[]> list = new ArrayList<>();
		for(int[] x : people) {
			list.add(x[1],x);
		}
		return list.toArray(new int[list.size()][]);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值