根据身高重建队列

本文介绍了一种基于身高和相对位置信息重建混乱队列的算法。通过将人群按身高降序、k值升序排序,再根据k值作为索引逐个插入新数组中,确保了身高相同者k值大的在后,k值相同时身高高者在前,满足队列重建需求。

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

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

注意:
总人数少于1100人。

示例

输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

这题完全是看别人的代码怎么做的,至于为什么这么做,道理在哪里,自己其实也想不通。。
1.身高降序排列,k值升序排列
2.创建一个新的二维数组,一个个的往里面插入已排好序的值,策略是:依次按照k的值作为索引插入到相应的位置。

这样做保证了两点:
1.相同身高的,k值大的会被插入到k值小的后面。
2.k值相同的,身高矮的被插入到前面。因为已按要求排好序。

其实仔细想想,这也正满足了题目重建队列的要求。。。

public int[][] reconstructQueue(int[][] people) {
		if(people == null || people.length==0 || people[0].length == 0)
			return new int[0][0];
		
		Arrays.sort(people, (a,b)->(a[0]==b[0] ? a[1]-b[1] : b[0] - a[0]));
		List<int[]> queue = new ArrayList<int[]>();
		for(int[] p:people) {
			queue.add(p[1], p);
		}
        return queue.toArray(new int[queue.size()][]);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值