《LeetCode力扣练习》代码随想录——双指针法(四数之和---Java)

《LeetCode力扣练习》代码随想录——双指针法(四数之和—Java)



刷题思路来源于 代码随想录

18. 四数之和
  • 双指针
    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
    
            List<List<Integer>> result=new ArrayList<>();
    
            if(nums.length<4){
                return result;
            }
    
            if(nums.length==4&&(long)nums[0] + nums[1] + nums[2] + nums[3] == target){
                result.add(Arrays.asList(nums[0],nums[1],nums[2],nums[3]));
                return result;
            }
    
            Arrays.sort(nums);
    
            for(int a=0;a<nums.length;a++){
    
                if(target>0&&nums[a]>=target){
                    break;
                }
    
                if(a>0&&nums[a-1]==nums[a]){
                    continue;
                }
    
                for(int b=a+1;b<nums.length;b++){
    
                    if(target>0&&nums[a]+nums[b]>=target){
                        break;
                    }
    
                    if(b>a+1&&nums[b-1]==nums[b]){
                        continue;
                    }
    
                    int left=b+1;
                    int right=nums.length-1;
    
                    while(left<right){
    
                        long temp=(long)nums[a] + nums[b] + nums[left] + nums[right];
    
                        if(temp>target){
                            right--;
                        }else if(temp<target){
                            left++;
                        }else{
    
                            result.add(Arrays.asList(nums[a],nums[b],nums[left],nums[right]));
    
                            while(left<right&&nums[left]==nums[left+1]){
                                left++;
                            }
                            left++;
    
                            while(left<right&&nums[right-1]==nums[right]){
                                right--;
                            }
                            right--;
    
                        }
    
                    }
    
                }
    
            }
    
            return result;
    
        }
    }
    

你可能感兴趣的:(LeetCode,leetcode,java,算法)