406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
该题需要使用贪心算法进行求解(虽然我一直没搞懂贪心在哪里),首先就是要对列表进行排序,然后一个个插入结果列表,C++的实现代码如下(用的list数据结构方便插入):
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
if(!people.size()) return vector<vector<int>>(NULL);
sort(
people.begin(),people.end(),[]
(const vector<int> &lhs,const vector<int> &rhs)
{
if (lhs[0]>rhs[0]) return true;
if(lhs[0]==rhs[0]&&lhs[1]<rhs[1]) return true;
return false;
}
);
int len=people.size();
list<vector<int>> tmp;
for(int i=0;i<len;++i)
{
auto it=tmp.begin();
advance(it,people[i][1]);
tmp.insert(it,people[i]);
}
return vector<vector<int>>(tmp.begin(),tmp.end());
}
};
运行效果:
相同的思路Python代码如下:
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
people.sort(key=lambda x:(-x[0],x[1]))
result=[]
for i in people:
result.insert(i[1],i)
return result
运行效果:
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height