原题网址:https://www.lintcode.com/problem/3sum/description
描述
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
您在真实的面试中是否遇到过这个题?
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
标签
排序
两根指针
数组
思路:
三重循环暴力破解,唉,菜鸟第一想法。找到一组答案后判断下是否与result中已有组合重复,这个判重可以单独定义成一个函数。
AC代码:
class Solution { public: /** * @param numbers: Give an array numbers of n integer * @return: Find all unique triplets in the array which gives the sum of zero. */ vector<vector<int>> threeSum(vector<int> &numbers) { // write your code here vector<vector<int>> result; int size=numbers.size(); for (int i=0;i<size;i++) { for (int j=i+1;j<size;j++) { for (int k=j+1;k<size;k++) { if (numbers[i]+numbers[j]+numbers[k]==0) { vector<int> temp; temp.push_back(numbers[i]); temp.push_back(numbers[j]); temp.push_back(numbers[k]); sort(temp.begin(),temp.end()); if (result.empty()) { result.push_back(temp); } else { bool canInsert=true; for (int ind=0;ind<(int)result.size();ind++) { if(same(temp,result[ind])) { canInsert=false; break; } } if (canInsert) { result.push_back(temp); } } } } } } return result; } bool same(vector<int> num1,vector<int> num2) { for (int i=0;i<(int)num1.size();i++) { if (num1[i]!=num2[i]) { return false; } } return true; } };