[leetcode]15. 三数之和

暴力n^3不行

两数之和,三数之和和四数之和都有一个套路,那就是排序后设置前后指针算sum比较差值后,进行指针调整。

算法复杂度为O(nlgn)+O(n^2),虽然思路是这样的,但是写下来的代码也是有差异的,我写的代码50%,而别人写的代码90+%,WTF??特别的是,我稍微跟着别人的代码改啦下,发现,还是在50%徘徊,不行,我一定要找出差距所在。。后来修改后,相同的代码有的超出时间限制,有的10%+-,有的98%,评测的差距也大。。。

主要差别就是           

while(j<k)

            {
    //3
                sum=nums[i]+nums[j]+nums[k];
                if(sum<0)j++;
                else if(sum>0)k–;
                else
                {
                    result.add(Arrays.asList(nums[i],nums[j],nums[k]));
                    do{ ++j; } while(j<k&&nums[j] == nums[j-1] );        // 1
                    do{ –k; } while(j<k&&nums[k+1] == nums[k]);        //2
                }

            }

我将1和2的判断放在啦3位置而已,不过别人的代码显得更骚气点

还有个时间更快的代码,以空间换时间,看起来有点太长啦,不想看

点赞