【leetcode】406. 根据身高重建队列

思路:先按照顺序,对数组进行排序
身高和编号两个维度
身高按照降序排列:因为先访问身高高的,插入数组里边,后续再插入的时候之前元素编号是不会变化的
编号升序排列:这样按照访问顺序,编号高的就可以后插入
涉及到插入,用list更方便一些,插入的时候元素编号是多少就插入到哪个位置(已经是按照降序排列了,已经插入形成的数组的元素都比要插入的元素大,所以编号是多少,他在新插入的数组中的位置就是多少)

class Solution {
public:
	static bool comp(vector<int>&s1, vector<int>&s2)
	{
		return s1[0] == s2[0] ? s1[1]<s2[1] : s2[0]>s1[0];
	}
	vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
		//按照身高排序
		sort(people.begin(), people.end(),comp);
		list<vector<int>>lt;
		//有点像插入排序
		for (int i = 0; i <people.size() ; i++)
		{
			int position = people[i][1];
			std::list<vector<int>>::iterator iter = lt.begin();
			while (position--)
			{
				iter++;
			}
			lt.insert(iter, people[i]);
		}
		return vector<vector<int>>(lt.begin(), lt.end());
	}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值