LeetCode第18题四数之和

简介: 该文章介绍了 LeetCode 第 18 题四数之和的解法,与三数之和类似,通过先排序,再用双指针确定坐标并去重的方式解决,关键是确定四个坐标,前两个通过两层循环确定,后两个通过首尾双指针确定,同时总结了双指针可减少循环次数,使解决方式更简单高效。

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

image.png

分析一波题目

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

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

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

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

编码解决

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数之和一样,通过首尾的双指针法确定后面两个数字的下标。

相关文章
|
3月前
【LeetCode 17】5.7四数之和
【LeetCode 17】5.7四数之和
35 1
|
3月前
Leetcode第十八题(四数之和)
这篇博客介绍了LeetCode第18题“四数之和”的解法,通过排序和双指针技术来找出数组中所有和为特定值的四个不同元素的组合。
23 0
|
7月前
18.四数之和
18.四数之和
|
8月前
18. 四数之和
18. 四数之和
53 2
|
7月前
|
算法 容器
【LeetCode刷题】三数之和、四数之和
【LeetCode刷题】三数之和、四数之和
|
8月前
[leetcode] 四数之和 M
[leetcode] 四数之和 M
|
8月前
|
Java 测试技术 C++
leetcode-18:四数之和
leetcode-18:四数之和
49 0
|
算法 安全 Swift
LeetCode - #18 四数之和
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
存储 测试技术 C++
力扣1-两数之和&力扣15-三数之和
力扣1-两数之和&力扣15-三数之和
88 0