我刚刚在 Leetcode 上做了一道题。但我对 C++ 的 sort() 函数感到困惑。
这是有关它的更多详细信息:
给定一个整数数组 nums,根据值的出现频率对数组进行升序排序。如果多个值具有相同的频率,则按降序对它们进行排序。
-输入:数组
-输出:遵循问题规则的排序数组
这是我的代码。
第一个代码片段:
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
std::map<int, int> hm;
for (int numb : nums)
hm[numb] ++ ;
sort(nums.begin(), nums.end(), [&](int a,int b){
if(hm[a] == hm[b])
return a > b;
return hm[a] < hm[b];
});
}
}
第二个代码片段:
class Solution {
public:
vector<int> frequencySort(vector<int>& nums) {
std::map<int, int> hm;
for (int numb : nums)
hm[numb] ++ ;
sort(nums.begin(), nums.end(), [&](int a,int b){
if(hm[a] == hm[b])
return a > b;
return hm[a] < hm[b];
});
return nums;
vector<int> arr;
for(auto &[numb,freq] : hm){
while(freq > 0){
arr.push_back(numb);
freq--;
}
}
std::sort(arr.begin(), arr.end(), [&](int a, int b){
if( hm[a] == hm[b])
return a > b;
else
return hm[a] < hm[b];
});
return arr;
}
};
这是一个例子
-输入:
[1,1,2,2,2,3]
[3,1,1,2,2,2]
[3,2,2,2,1,1]
我不明白的是为什么第二个的 sort() 函数似乎不起作用?有人可以帮我说清楚吗?
我尝试了两个具有相同功能的代码片段,但似乎返回了两个不同的结果。
两个函数都是错误的。
第一个函数不
return
任何东西,这是未定义的行为。
第二个函数
return
太早了,跳过了 1/2 的代码。
编译器应该警告你这两个错误。