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;
        
      }
};

 

posted @ 2016-11-21 17:22  Initial_Dream  阅读(145)  评论(0编辑  收藏  举报