57 三数之和

原题网址: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;
}

};
 

猜你喜欢

转载自www.cnblogs.com/Tang-tangt/p/9111270.html
57