暴力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位置而已,不过别人的代码显得更骚气点
还有个时间更快的代码,以空间换时间,看起来有点太长啦,不想看