首页 > 学院 > 开发设计 > 正文

leetcode406

2019-11-08 00:58:16
字体:
来源:转载
供稿:网友

并不是太简单,还是有点难度,这是stl的胜利。

本题采用greedy的思路,对于pair(h,k)。首先确定优先顺序:按照k从小到大的顺序排序;当k相同时,按照h从小到大排序。

首先 static bool cmp函数用于sort内使用,必须加上static,不然会出错。

std::sort(people.begin(),people.end(),cmp)对people排序。

distance函数可以返回正值或负值,根据情况而定,就是返回distance(begin,end)——-(end-begin).

itOld=result.insert(it,people[i]);返回插入后的地址。

每次操作前都需要比较一番插入前后的地址。

class Solution {public: static bool cmp( pair<int,int>& a, pair<int,int>& b) { if(a.second<b.second) return true; else if(a.second==b.second&&a.first<b.first) return true; else return false; } vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) { if(people.size()==0) return people; else { std::sort(people.begin(),people.end(),cmp); vector<pair<int, int>> result; result.push_back(people[0]); vector<pair<int, int>>::iterator it=result.begin(); vector<pair<int, int>>::iterator itOld=result.begin(); for(int i=1;i<people.size();i++) { int num=people[i].first; int time=people[i].second; int j=0; while(time!=0) { if(result[j].first>=num) time--; j++; } it=result.begin()+j; if(people[i-1].second==people[i].second) { if(distance(itOld,it)<=0) it=itOld+1; } itOld=result.insert(it,people[i]); } return result; } }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表