剑指 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-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?