1403题目,非递增顺序的最小子序列。
题目很简单,利用贪心的策略,对数组从大到小排序,然后尽量从前面取最小的满足题目要求的子数组即可。
我的bug出在对数组从大到小排序这里,报错代码以及报错信息如下。
vector<int> minSubsequence(vector<int>& nums) {
sort(nums.begin(),nums.end(),[](int n1,int n2){
return n1 >= n2;
});//head overflow
int sums = 0;
for(int n : nums) sums += n;
vector<int> ans;
int idx = 0;
int left = 0,right = sums;
while(idx < nums.size() && left <= right){
ans.push_back(nums[idx]);
left += nums[idx];
right -= nums[idx];
idx++;
}
return ans;
}
根据在代码加入return vector<int>();的方式,报错在函数中第一行,可能是我的lambda函数写错了?改成sort(nums.begin(),nums.end(),greater<int>());报错消失。比较函数写成>比较的话,bug也会消失
但是我在本地,使用gcc编译以后,代码是不会heap-overflow的,很奇怪。
有大佬能指点一下吗。
347题出了相同的问题,很奇怪,代码贴一下
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> val2cnt;
for(int n : nums){
val2cnt[n]++;
}
vector<pair<int,int>> pairs(val2cnt.begin(),val2cnt.end());
sort(pairs.begin(),pairs.end(),[](pair<int,int>& p1,pair<int,int>& p2){
return p1.second > p2.second;// >= 则heap overflow
});
vector<int> ans(k);
for(int idx = 0;idx < k;idx++){
ans[idx] = pairs[idx].first;
}
return ans;
}
56题同样的bug,也是sort的时候不能用 <= 号,必须用 < 号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)