剑指 Offer II 007. 数组中和为 0 的三个数
2022/3/30 6:22:22
本文主要是介绍剑指 Offer II 007. 数组中和为 0 的三个数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
暴力去重
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { map<int, int> cnt; int n = nums.size(); for(int i = 0; i < n; i++) { if(cnt[nums[i]] == 0) cnt[nums[i]] = 1; else cnt[nums[i]]++; } vector<vector<int> > ret; sort(nums.begin(), nums.end()); for(int i = 0; i < n; i++) { if(i > 0 && nums[i] == nums[i - 1]) continue; for(int j = i + 1; j < n; j++) { // cout << nums[j] << " " << nums[j - 1] << endl; if((j > i + 1) && (nums[j] == nums[j - 1])) { continue; } vector<int> temp; int kk = 0 - (nums[i] + nums[j]); if(kk < nums[j]) continue; if((kk == nums[j] && cnt[kk] > 1) || kk != nums[j] && cnt[kk]) { if(kk == nums[i]) { if(i > 1 && kk == nums[i - 1]) continue; if(cnt[kk] >= 3) { temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(kk); } } else{ temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(kk); } // cout << nums[i] << " " << nums[j] << " " << kk << " " << r << endl; } if(temp.size() == 3) { sort(temp.begin(), temp.end()); ret.push_back(temp); } } } // sort(ret.begin(), ret.end()); // int k = unique(ret.begin(), ret.end()) - ret.begin(); // cout << k << " " << ret.size() << endl; vector<vector<int> > R; for(int i = 0; i < ret.size(); i++) { R.push_back(ret[i]); } return R; } };
这篇关于剑指 Offer II 007. 数组中和为 0 的三个数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南