3sum总结(java)

排除写错的情况,总结一下:

出现两次time  limit exceeded超时

第一次,在数组排序完了以后,判断上一次和这一次的firstNum是否重复,我用的while,仔细想了一下确实这里不需要用while循环判断,直接if判断就可以,省去不少时间,顺便将第二个第三个数的初始声明放在了if判断之后,如果前后数字重复了我就不用声明了,这里也节约一点时间。

第二次,判断两数之和是否符合目标数值,之后要将左索引向右移动,右索引像左移动,我没有想到可以同时向中间缩小,一开始我以为同时向中间会出现本来和目标只差1,同时向中间缩小,还是差1,比如-3和1、3差了1,同时向中间如果是-3和2、2还是差1。我就比较笨的左边挪一步右边挪一步,虽然也可以实现,但是写成同时同时往中间缩小,错开一步我再往回挪一下步,从整体来看就省去了很多时间。

附上代码

class Solution {
    public List> threeSum(int[] nums) {
        List> result = new ArrayList>();
        int len = nums.length;
        if(len<3){
            return result;
        }
        Arrays.sort(nums);
        for(int i=0;inumTarget){
                        rightIndex--;
                    }
                }
            }
        }
        
        return result;
     }
}

以及结果

3sum总结(java)_第1张图片

你可能感兴趣的:(learning)