LeetCode15——3Sum

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)

难度系数:

中等

实现

vector<vector<int> > threeSum(vector<int> &num) {
    vector<vector<int> > vvi;
    if (num.size() < 3) return vvi;
    std::sort(num.begin(), num.end(), [] (int a, int b) {return a < b;});
    int f, s, t;
    for (f = 0; f < num.size()-2; ++f) {
        if (f > 0 && num[f] == num[f-1])
            continue;
        for (s = f + 1; s < num.size() - 1; ++s) {
            if (s != f+1 && num[s] == num[s-1])
                continue;
            t = s + 1;
            while (num[f]+num[s]+num[t] <= 0) {
                if (num[f]+num[s]+num[t] == 0) {
                    vector<int> vi;
                    vi.push_back(num[f]);
                    vi.push_back(num[s]);
                    vi.push_back(num[t]);
                    vvi.push_back(vi);
                    break;
                } else if (t < num.size() - 1) {
                    t++;
                } else {
                    break;
                }

            }
        }
    }
    return vvi;
}

你可能感兴趣的:(LeetCode)