寻找数组中三个数求和为0的组合(naive edition)

来源:互联网 发布:画图软件如何使用方法 编辑:程序博客网 时间:2024/06/06 03:27

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: 
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c) 
The solution set must not contain duplicate triplets. 
For example, given array S = {-1 0 1 2 -1 -4},

A solution set is:(-1, 0, 1)(-1, -1, 2)
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;class solution{public:vector<vector<int>> ress;vector<int> res;vector<vector<int> > sum_3(vector<int>& nums){for (int i = 0; i < nums.size()-2; i++){for (int j = i+1; j < nums.size()-1; j++){for (int k = j+1; k < nums.size(); k++){if (nums[i] + nums[j] + nums[k] == 0){res.clear();res.push_back(nums[i]);res.push_back(nums[j]);res.push_back(nums[k]);sort(res.begin(),res.end());//用了algotithm中的sort()方法进行排序ress.push_back(res);}}}}return ress;}};int main(){vector<int> a = { 0, 1, -1, 2, -2, 3, -1, 5, -8, 9, 45 };solution s;vector<vector<int>> ress;ress=s.sum_3(a);for (int i = 0; i < ress.size(); i++){sort(ress.begin(),ress.end());//可以对向量的向量(二维数组)排序,首先比较的是各个向量的第一个元素//若第一个一样大,则比较第二个,以此排序ress.erase((unique(ress.begin(), ress.end())),ress.end());//可以对向量或这个向量的向量的执行这些操作for (int j = 0; j < 3; j++){cout << ress[i][j] << ' ';}cout << endl;}}
阅读全文
0 0
原创粉丝点击