leetcode15 3Sum
来源:互联网 发布:数据集市的作用 编辑:程序博客网 时间:2024/06/06 02:32
题意就是给定一组数,任意选取三个数,每个数只能选取一次,找到所有三个数为0的组合,其实找到所有组合还是比较简单的,先固定一个数,之后两个数因为是在一个序列上选取,定义两个指针一个指向头一个指向尾,根据三个数的和是否大于0来决定往前走还是往后走,这样就简化成n^2的效率.
难点在去重上,先是用了vector的去重结果超时了.
之后就想重复的数一定就是产生重复序列的罪魁祸首,之后就利用三个while循环,略过所有一样的数,调了几次,果断ok了.还是逻辑上想的不够多,导致总是缺项,加强逻辑缜密性啊.
#include "iostream"#include "vector"#include "algorithm"#include "string"using namespace std;class Solution {public: vector<vector<int> > threeSum(vector<int>& nums) { int len = nums.size(); int right,left; sort(nums.begin(),nums.end()); vector<vector<int> > result; if(len < 3) return result; for(int i = 0 ; i < nums.size()-2; i++) //cout<<"("<<nums[i]<<")\n"; { if(nums[i]>0) break; if(i!=0) { if(nums[i] == nums[i-1]) continue; } //cout<<"("<<result.size()<<")"<<endl; //-2 0 1 1 2 right = i+1; left = nums.size()-1; for(;right<left;) { if(nums[i]+nums[right]+nums[left] == 0) { vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[right]);temp.push_back(nums[left]);result.push_back(temp); } if(nums[i]>0) break; if(nums[i]+nums[right]+nums[left] > 0) { left--; while(nums[left] == nums[left+1]) left--; } else { right++; while(nums[right] == nums[right-1]) right++; } } } //sort(result.begin(), result.end()); //vector<vector<int> >::iterator last2; //last2 = unique(result.begin(),result.end()); //result.erase(last2, result.end()); return result; }};int main(){Solution test;vector<int> num;num.push_back(1);num.push_back(1);num.push_back(-2);num.push_back(0);num.push_back(2);//num.push_back(0);vector<vector<int> > result;result = test.threeSum(num); for(int i = 0 ; i < result.size(); i++) { cout<<i<<endl; for(int j = 0 ; j < result[i].size(); j++) { cout<<"<"<<result[i][j]<<">"<<endl; } }return 0;}
0 0
- LeetCode15: 3 Sum
- LeetCode15:3Sum
- leetcode15 3Sum
- leetcode15 3Sum
- LeetCode15:3Sum
- leetcode15 3sum
- [LeetCode15]3Sum
- leetcode15---3Sum
- leetcode15.3Sum
- leetcode15:3Sum
- leetcode15:3Sum
- Leetcode15. 3Sum
- leetcode15. 3Sum
- leetcode15~3Sum
- leetcode15. 3Sum
- leetcode15. 3Sum
- LeetCode15. 3Sum
- leetcode15: 3Sum
- static 剖析(C++)
- JSP/Servlet-----10、JSP2的自定义标签
- iOS开发学习之C语言---C10 函数指针-3
- iOS开发学习之C语言---C11 二维数组、字符串数组、多维数组
- 值得推荐的C/C++框架和库
- leetcode15 3Sum
- 排序算法之Bucket Sort
- 二维数组查询
- samsung s3 gt-19300 开发 键盘回车事件
- 设计模式——行为型模式
- iOS中操作SQLite数据库
- 使用struts2+MySQL做简单的登录验证
- Xcode升级到7.1出现itms-90049 错误 的解决办法
- 2006年浙江大学1019简单计算器代码(栈的使用)