leetcode_15_三数之和@@数组(双指针)

在这里插入图片描述

class Solution {
     public List<List<Integer>> threeSum(int[] nums) {
    	
    	List<List<Integer>> list=new ArrayList<List<Integer>>();
    	if(nums.length<3) return list;
    	Arrays.sort(nums);
    	
    	int lastIndex=nums.length-3;
    	for(int i=0;i<=lastIndex;i++) {
    		if(i>0 && nums[i]==nums[i-1]) continue;
    		int l=i+1;
    		int r=nums.length-1;
    		int remainSum=-nums[i];
    		while(l<r) {
    			if((nums[l]+nums[r])==remainSum) {
    				list.add(Arrays.asList(nums[i],nums[l],nums[r]));
    				while(l<r && nums[l]==nums[l+1]) l++;
    				while(l<r && nums[r]==nums[r-1]) r--;
                    l++;
    				r--;
    			}else if((nums[l]+nums[r])<remainSum) {
    				l++;
    			}else {
    				r--;
    			}	
    		}
    	}
    	return list;
    }
}

猜你喜欢

转载自blog.csdn.net/ruochen82155551/article/details/107643306