2021/4/5,记录一下学到了优先队列的重载:
思路很简单,就排序就行了,先把数字转换成字符串,然后比较他们的先后顺序组成的数字哪个大就行了。
一开始用了sort自定义排序,然后用了优先队列的重载(学到了优先队列重载的是小于号,我一开始用的大于号一直报错hh)
sort自定义排序代码:
class Solution {
public:
static bool cmp(int a,int b)
{
string x=to_string(a)+to_string(b);
string y=to_string(b)+to_string(a);
if(x<y)
return true;
else
{
return false;
}
}
string minNumber(vector<int>& nums) {
sort(nums.begin(),nums.begin()+nums.size(),cmp);
string ans;
for(int i=0;i<nums.size();i++)
{
ans+=to_string(nums[i]);
}
return ans;
}
};
优先队列重载代码:
class Solution {
public:
struct p{
string s;
p(string a):s(a){}
friend bool operator <(p a,p b)//重载小于号,但是大根堆还是判断的大的在前
{
return a.s+b.s>b.s+a.s;
}
};
string minNumber(vector<int>& nums) {
vector<string> strs;
priority_queue<p> n;
for(int i=0;i<nums.size();i++)
{
n.push(p(to_string(nums[i])));
}
string ans;
while(!n.empty())
{
ans+=n.top().s;
n.pop();
}
return ans;
}
};
ps:因为数据不同,并不是说堆排比快排快,二者平均时间复杂度是一样的