当前位置: 首页 > news >正文

LeetCode[18]四数之和

思路:

做四数之和之前,我还真没想到能用三数之和来做,这三数之和真是白做了。0.0,四数也就是比三数多一个数而已,这个数再用for循环了便是,剩下的还是和三数之和一样,就剪枝也是和三数之和差不多,唯一区别就是这个不是四数相加等于0,而是四数相加等于一个target,第一个数比target大,这个显然行不通,因为第一个数可能是负数,比如-4,-1,0,0,-5,target=-5,那么第一个数明明可以,但却被我们剪掉了,这是不可以的,所以我们必须保证第一个数为正数的时候再和target进行比较。剩下的就和三数之和一样了,想看的朋友可以在我的题解里搜一下。

代码:

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        for (int k = 0; k < nums.length; k++) {
            if (nums[k] > target && nums[k] >= 0)
                break;
            if (k > 0 && nums[k] == nums[k - 1])
                continue;

            for (int i = k + 1; i < nums.length; i++) {
                if (nums[k] + nums[i] > 0 && nums[k] + nums[i] > target)
                    break;
                if (i > k + 1 && nums[i] == nums[i - 1])
                    continue;

                int left = i + 1;
                int right = nums.length - 1;
                while (left < right) {
                    int sum = nums[k] + nums[i] + nums[left] + nums[right];
                    if (sum == target) {
                        res.add(Arrays.asList(nums[k], nums[i], nums[left], nums[right]));

                        while (left < right && nums[left] == nums[left + 1])
                            left++;
                        while (left < right && nums[right] == nums[right - 1])
                            right--;
                        left++;
                        right--;
                    } else if (sum > target) {
                        right--;
                    } else {
                        left++;
                    }
                }

            }
        }
        return res;
    }
}

 

相关文章:

  • 江顺科技应收账款期后回款比率大降:现金流急剧减少,研发费用率下滑
  • Unity中计算闭合路径内部的所有点位
  • Kubenetes-基于kubespray 部署集群
  • 鸿蒙开发-编译器使用
  • 如何 在 Cesium 中选取特定经纬度区域,特定视角 ,渲染成图片
  • 什么叫“架构”
  • 交通运输部4项网络与数据安全标准发布
  • Bash脚本编写基础指南
  • 对接印度尼西亚股票数据源API
  • Linux ELF文件格式
  • 【笔记ing】AI大模型-03深度学习基础理论
  • 深入剖析C++中 String 类的模拟实现
  • Java实现快速排序算法
  • Java 数据库访问工具 dbVisitor 的技术解析与同类工具比较
  • Kimi-VL 解读:高效 MoE 视觉语言模型VLM,兼顾长上下文与高分辨率
  • MySQL——学习InnoDB(1)
  • LabVIEW配电器自动测试系统
  • Xmind 2025 中文思维导图
  • MySQL表的使用(4)
  • 【3GPP核心网】【5G】精讲5G系统的策略和计费控制框架
  • 国务院国资委:推动央企强化资金统筹,确保及时付款
  • 上海黄金交易所:贵金属价格波动剧烈,提示投资者做好风险防范
  • 花卉引流+商场促销,上海浦东用“花经济”带动“消费热”
  • 云南昭通一公园发现毒饵,多只宠物狗疑中毒致死
  • 特朗普就防卫负担施压日本,石破茂:防卫费应由我们自主决定
  • 疼痛管理“童”样重要,解读围术期疼痛管理