《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;} }