[leetcode] 3Sum

来源:互联网 发布:转行数据分析师经历 编辑:程序博客网 时间:2024/05/17 06:54

From : https://leetcode.com/problems/3sum/

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:

  • 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)
class Solution {public :    vector<vector<int> > threeSum(vector<int>& nums) {        vector<vector<int> > res;        if(nums.size()==0) return res;        sort(nums.begin(), nums.end());                int j, k, len = nums.size(), sum;        for(int i=0; i<nums.size(); i++) {            if(nums[i] > 0) break;            while(i<nums.size() && i>0 && nums[i] == nums[i-1]) i++;            j=i+1; k=len-1;            while(j<k) {                while(j>i+1 && j<len && nums[j]==nums[j-1]) j++;                while(j<k && k<len-1 && nums[k]==nums[k+1]) k--;if(k<=j) break;                sum = nums[i]+nums[j]+nums[k];                if(sum == 0) {    vector<int> cur;                    cur.push_back(nums[i]);                    cur.push_back(nums[j]);                    cur.push_back(nums[k]);                    res.push_back(cur);                    j++;k--;                } else if(sum>0) {                    k--;                } else  {                    j++;                }            }                    }        return res;    }};
public class Solution {    public List<List<Integer>> threeSum(int[] nums) {        if(null == nums || nums.length < 3) {            return new ArrayList<List<Integer>>();        }        List<List<Integer>> ans = new ArrayList<List<Integer>>();        Arrays.sort(nums);                for(int i=0, lst=nums.length-1; i<lst && nums[i]<=0; ++i) {            if(i>0 && nums[i]==nums[i-1]) continue;            int j = i+1, k = lst;            while(j < k) {                if(j>i+1 && nums[j]==nums[j-1]) {                    ++j;                    continue;                }                if(k<lst && nums[k]==nums[k+1]) {                    --k;                    continue;                }                int sum = nums[i]+nums[j]+nums[k];                if(sum == 0) {                    List<Integer> cur = new ArrayList<Integer>();                    cur.add(nums[i]);                    cur.add(nums[j++]);                    cur.add(nums[k--]);                    ans.add(cur);                } else if(sum < 0) {                    ++j;                } else {                    --k;                }            }        }                return ans;    }}



0 0
原创粉丝点击