LeetCode刷题笔记-15. 3sum

3sum

思路:

1.先排序sort(nums.begin(),num.end())

2.

if(nums[i]>0)break;只看小于0的部分,当大于0时停止循环

if(i>0 && nums[i]==nums[i-1])continue;如果遇到相同的数不计算,跳出当次循环,进入下一次循环

最终通过的代码如下,其中有个地方很纠结,就是总会有多出来的数组或者遗漏的数组。原因在while和if使用不当(见下面*)。之前一直用if,提交时总是会报错,不管怎么调换这两句的位置都不对,不是多了就是少了。比如测试数组[-5,-3,-2,0,0,0,1,1,1,3,3,4,4],总是会有两个[-5,1,4],[-5,1,4]出现,原因就是这两句用了if。区别就是如果用if,只能滤过第2个“1”,而改为while以后,第3个“1”(后面更多的相同数字)都可以滤掉了。这个是基础概念不扎实,反省一下,继续努力!

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<int> A;
        vector<vector<int> >B;
        sort(nums.begin(),nums.end());
        int i;
        int begin;
        int end;
        int sum;
        for(i=0;i<nums.size();i++)
        {
            if(nums[i]>0){break;}
            if((nums[i]==nums[i-1])&&(i>0)){continue;}
            begin=i+1;
            end=nums.size()-1;
            while(begin<end)
            {
                
                sum=nums[i]+nums[begin]+nums[end];
                if(sum==0)
                {
                    A.push_back(nums[i]);
                    A.push_back(nums[begin]);
                    A.push_back(nums[end]);
                    B.push_back(A);
                    A.clear();
                    begin++;
                    end--;
                    while((nums[begin]==nums[begin-1])&&(begin<end)){begin++;}//*
                    while((nums[end]==nums[end+1])&&(begin<end)){end--;}//*
                }
                else if(sum<0)
                {
                    
                    begin++;
                }
                else
                {
                    
                    end--;
                }
            }
            
        }
        return B;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值