LeetCode 15.3Sum

//C++

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {	   
   sort(nums.begin(), nums.end());
    vector<vector<int>> res;
  
    for (unsigned int i=0; i<nums.size(); i++) 
    {
        if ((i>0) && (nums[i]==nums[i-1]))
            continue;
        int l = i+1, r = nums.size()-1;
        while (l<r) {
            int s = nums[i]+nums[l]+nums[r];
            if (s>0) r--;
            else if (s<0) l++;
            else {
                res.push_back(vector<int> {nums[i], nums[l], nums[r]});
               while (l < (nums.size() - 1)&&(nums[l] == nums[l + 1])) l++;
				while (r > l && (nums[r] == nums[r - 1])) r--;
                l++; r--;
            }
        }
    }
    return res;  
    }
};
//java
class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans= new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++)
        {
            if(nums[i]>0) break;
            if(i>0&&nums[i]==nums[i-1]) continue;
            int L=i+1;
            int R=nums.length-1;
            while(L<R)
            {
                int a=nums[i]+nums[L]+nums[R];
                if(a==0)
                {
                    List<Integer>aa=new ArrayList<>();
                    aa.add(nums[i]);
                    aa.add(nums[L]);
                    aa.add(nums[R]);
                    ans.add(aa);
                    while (L<R && nums[L] == nums[L+1]) L++;
                    while (L<R && nums[R] == nums[R-1]) R--;

                    L++;
                    R--;
                }
                if(a<0) {L++;}
                if(a>0) {R--;}
            }

        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值