zoukankan      html  css  js  c++  java
  • 四数之和

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

    注意:

    答案中不可以包含重复的四元组。

    示例:

    给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

    满足要求的四元组集合为:
    [
    [-1, 0, 0, 1],
    [-2, -1, 1, 2],
    [-2, 0, 0, 2]
    ]

    public class T18 {

    public List<List<Integer>> fourSum(int[] nums, int target) {
    Arrays.sort(nums);
    List<List<Integer>> lists = new ArrayList<>();
    if (nums == null || nums.length < 4)
    return lists;
    for (int i = 0; i < nums.length - 3; i++) {
    if (i > 0 && nums[i] == nums[i - 1]) {
    continue;
    }
    for (int j = i + 1; j < nums.length - 2; j++) {
    if (j > i + 1 && nums[j] == nums[j - 1]) {
    continue;
    }
    int l = j + 1, r = nums.length - 1;
    while (l < r) {
    int sum = nums[i] + nums[j] + nums[l] + nums[r];
    if (sum == target) {
    List<Integer> list = new ArrayList<>();
    list.add(nums[i]);
    list.add(nums[j]);
    list.add(nums[l]);
    list.add(nums[r]);
    lists.add(list);
    //保证 l 和 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) {
    r--;
    } else {
    l++;
    }
    }
    }
    }

    return lists;
    }
    }
    一回生,二回熟
  • 相关阅读:
    19. 删除链表的倒数第 N 个结点
    相交链表
    环形链表2
    环形链表
    K8s 网络通讯
    Hutool-二维码生成
    Hutool-加解密
    Hutool-解析JSON
    Hutool-读取配置文件中的配置
    Hutool-操作图片
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12505167.html
Copyright © 2011-2022 走看看