力扣18题Java

简介: 力扣18题Java

题目
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:答案中不可以包含重复的四元组。
image.png
**代码
**
class Solution {

public List<List<Integer>> fourSum(int[] nums, int target) {
     List<List<Integer>>  list = new ArrayList<>();
     int len = nums.length;
     //特判
     if(nums == null || len < 4) return list;
     //排序
     Arrays.sort(nums);
     //循环
     for(int i = 0 ;i < len - 3 ;i++){//固定i
         if(i > 0 && nums[i] == nums[i - 1])continue;//去重
     for(int j = i + 1; j < len - 2;j++){//固定j
         if( j > i + 1 && nums[j] == nums[j - 1])continue; //去重 
         int L = j + 1;
         int R = len - 1;
        
         while( L < R)   {
         int sum = nums[i] + nums[L] + nums[R] + nums[j];
         if(sum == target){
         list.add(Arrays.asList(nums[i],nums[j],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(sum < target) L++;
         else if(sum > target) R--;
           }       
         }
     }
      return list;
}  

}

相关文章
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
159 0
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
178 6
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
196 2
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
186 1
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
198 1
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
132 2
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
227 0
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
190 0
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
162 0
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
136 0