我正在尝试解决LeetCode 上按频率排序字符的问题。第一个使用的二元运算符给了我一个 TLE,但是当我使用复合赋值运算符时它工作正常。但我不明白为什么。
这背后有什么逻辑吗?我在下面附上了两个代码,所以你可以自己试试。
这给了 TLE
class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> m;
for(int i = 0; i < s.length(); i++)
m[s[i]]++;
priority_queue<pair<int, char>> pq; // maxheap based on frequency
for(auto x = m.begin(); x != m.end(); x++)
pq.push(make_pair(x->second, x->first));
string ans = "";
while (!pq.empty())
{
for(int i = 0; i < pq.top().first; i++)
ans = ans + pq.top().second;
pq.pop();
}
return ans;
}
};
这工作正常
class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> m;
for(int i = 0; i < s.length(); i++)
m[s[i]]++;
priority_queue<pair<int, char>> pq; // maxheap based on frequency
for(auto x = m.begin(); x != m.end(); x++)
pq.push(make_pair(x->second, x->first));
string ans = "";
while (!pq.empty())
{
for(int i = 0; i < pq.top().first; i++)
ans += pq.top().second;
pq.pop();
}
return ans;
}
};