并不是太简单,还是有点难度,这是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;
}
}
};