[leetcode] 406. Queue Reconstruction by Height (medium)

原题

思路:
一开始完全没有思路。。看了别人的思路才解出来。

先按照他们的高度从高到低(因为我后面用的从前往后遍历插入,当然也可以从低到高)排序,如果高度一样,那么按照k值从小到大排序。
  排完序后我们可以注意到这样一个事实:如果我们按照先处理身最高的,那他们的k值就是他们所应该在的位置——因为已经没有比他们更高的了。
  所以我们从高度从高到低按照k值的位置一直插入到答案中即可。


class Solution {
 public:
  static bool cmp(pair<int, int> a, pair<int, int> b) {
    if (a.first == b.first) return a.second < b.second;
    return a.first > b.first;
  }
  vector<pair<int, int>> reconstructQueue(vector<pair<int, int>> &people) {
    vector<pair<int, int>> res;
    sort(people.begin(), people.end(), cmp);
    for (auto i : people) res.insert(res.begin() + i.second, i);
    return res;
  }
};
posted @ 2018-09-26 18:35  Ruohua3kou  阅读(155)  评论(0编辑  收藏  举报