LeetCode第18题四数之和

继续打卡算法题,今天学习的是LeetCode的第18题四数之和,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

分析一波题目

四数之和和之前的三数之和可以使用一样的解法

先排序,再用双指针,同时需要去重

因为排序了,去重复就变得容易了。

解题的关键是需要确定4个坐标,前面两个我们通过两层循环确定,后面两个通过首尾双指针来确定。

编码解决

java 复制代码
class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
		List<List<Integer>> result = new ArrayList<>();
        Arrays.sort(nums);
       
        for (int i = 0; i < nums.length; i++) {
            //去重复
            if (i > 0 && nums[i - 1] == nums[i]) {
                continue;
            }
            
            for (int j = i + 1; j < nums.length; j++) {
                //去重
                if (j > i + 1 && nums[j - 1] == nums[j]) {
                    continue;
                }

                int left = j + 1;
                int right = nums.length - 1;
                //双指针 确定后面两个坐标
                while (right > left) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum > target) {
                        right--;
                    } else if (sum < target) {
                        left++;
                    } else {
                        result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
                        //去重
                        while (right > left && nums[right] == nums[right - 1]) right--;
                        //去重
                        while (right > left && nums[left] == nums[left + 1]) left++;

                        left++;
                        right--;
                    }
                }
            }
        }
        return result;
    }
}

总结

双指针可以去除循环的次数,解决问题的方式更加简单高效,和3数之和一样,通过首尾的双指针法确定后面两个数字的下标。

相关推荐
Coder_Shenshen7 分钟前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
Moment44 分钟前
代码都能让 Agent 写了,我们为什么还要学前端?
前端·后端·面试
心仪久了会沦陷2 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方2 小时前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
悠仁さん3 小时前
【C++】哈希表
c++·算法·散列表
聪明的笨猪猪3 小时前
实际工程问题:AI生成Redis分布式锁的原子性缺陷导致库存超卖
java·经验分享·面试·ai编程
地平线开发者4 小时前
点云算法整理与常用计算模块:从数据到模型,再到工程与量化
算法·自动驾驶
武子康6 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
时间的拾荒人6 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
秋天的怀念_David7 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法