406. Queue Reconstruction by Height

    思路:这道题其实本质是一个排序问题,将pair元素排列,使得前面大于它的first元素的个数等于second。

    思考一下很容易发现,对于那些height最低的元素,second就是他们的位置,所以可以直接先排列height最低的元素,排完之后会发现其实剩下的与之前类似,排第二低元素的时候只是有些位置被第一低元素占了,但是这并不影响什么,因为第二元素之前的空位置数必须为second才行,这样发现其实所有的元素都是这样排列的,所以只需要将元素从低到高排,前面的空位置数等于它的second即可。

bool f(pair<int, int>a, pair<int, int>b)
{
  if (a.first < b.first)
    return 1;
  else if (a.first == b.first)
    return a.second>b.second;
  else
    return 0;
}
class Solution {
public:
    vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
       vector<pair<int, int>> t = people;
       int l = t.size();
       sort(t.begin(), t.end(), f);
       bool e[1101] = {};
       for (int i = 0; i <l; i++)
      {
       int j = 0;
       int k = 0;
       for (; j != t[i].second; k++)
      {
       if (!e[k])
         ++j;
      }
      for (; e[k] != 0; k++);
        e[k] = 1;
        people[k] = t[i];
      }
      return people;
        
      }
};

 

转载于:https://www.cnblogs.com/InitialD/p/7348903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值