LeetCode-13Sum

来源:互联网 发布:蜡烛图分析软件 编辑:程序博客网 时间:2024/05/25 18:12

一、问题描述

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

Note: The solution set must not contain duplicate triplets.

二、思路分析

先对S进行排序,建立三个索引 i,  j,  k;其中 i从0开始到size-2,j时刻比i大1,k从size-1开始,计算是sum = s[i]+s[j]+s[k],其中要消除重复,

循环i从0到size-2;

while循环直到j >=  k;

每个循环有三种情况:

如果sum = 0, 则j++,k--;

如果sum < 0, 则j++;

如果sum > 0, 则k--;

三、代码

class Solution {public:    vector< vector<int> > threeSum(vector<int>& nums) {        int n = nums.size();        int temp;        for (int i = 0; i < n; i++) {        for (int j = 0; j < n-i-1; j++) {        if (nums[j] > nums[j+1]) {        temp = nums[j];        nums[j] = nums[j+1];        nums[j+1] = temp;        }        }        }        vector<int> res(3, 0);        vector< vector<int> > rec;        int j = 0, k = 0;        for (int i = 0; i < n-2; ++i) {        if (i > 0&&nums[i] == nums[i-1]) {        continue;        }        j = i+1;        k = n-1;        while(j < k) {        int sum = nums[i]+nums[j]+nums[k];    if (sum == 0) {res[0] = nums[i];res[1] = nums[j++];res[2] = nums[k--];rec.push_back(res);while (j < k&&nums[j] == nums[j-1]) {j++;}while (j < k&&nums[k] == nums[k+1]) {k--;}    } else if(sum < 0) {    j++;    } else {    k--;    }    }        }        return rec;    }};

原创粉丝点击