Leetcode-454 四数相加 II

作者: itbird01 | 来源:发表于2021-10-26 00:14 被阅读0次

454. 四数相加 II

解题思路

  • 暴力解法--超时
    1.分析题意可知,四个数组的长度相等,所以最直接的解法,就是四个for循环
    2.找到满足条件的数据,则result++
    (四重for循环--超时)
    (两重for循环三次--依然超时)

  • 哈希映射解法
    1.先遍历A+B数组的结果,保存在map中,key为a+b的值,value为出现的次数
    2.遍历C+D数组,同时做判断,如果c+d的相反值,在map中出现过,则将map中对应的value,add 到result中

解题遇到的问题

1.哈希解法的关键点在于,如何将问题简化,首先需要想到四重for循环到双重循环的简化
2.其次,需要设计,key、value的对应值,分别是什么?

后续需要总结学习的知识点

哈希解法的总结

##解法1--超时
class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3,
            int[] nums4) {
        int result = 0;
        int k = 0;
        int[] a1 = new int[(int) Math.pow(nums1.length, 2)];
        for (int i = 0; i < nums1.length; i++) {
            for (int j = 0; j < nums2.length; j++) {
                a1[k++] = nums1[i] + nums2[j];
            }
        }

        k = 0;
        int[] a2 = new int[(int) Math.pow(nums1.length, 2)];
        for (int i = 0; i < nums3.length; i++) {
            for (int j = 0; j < nums4.length; j++) {
                a2[k++] = nums3[i] + nums4[j];
            }
        }

        for (int i = 0; i < a1.length; i++) {
            for (int j = 0; j < a2.length; j++) {
                if (a1[i] + a2[j] == 0) {
                    result++;
                }
            }
        }
        return result;
    }
}

##解法2--正确
class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        Map<Integer, Integer> countAB = new HashMap<Integer, Integer>();
        for (int u : A) {
            for (int v : B) {
                countAB.put(u + v, countAB.getOrDefault(u + v, 0) + 1);
            }
        }
        int ans = 0;
        for (int u : C) {
            for (int v : D) {
                if (countAB.containsKey(-u - v)) {
                    ans += countAB.get(-u - v);
                }
            }
        }
        return ans;
    }
}

相关文章

  • Leetcode-454 四数相加 II

    454. 四数相加 II[https://leetcode-cn.com/problems/4sum-ii/] 解...

  • LeetCode-454-四数相加 II

    LeetCode-454-四数相加 II 454. 四数相加 II[https://leetcode-cn.com...

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

  • 算法-四数相加II

    题目: 分析: 总共四个数组,简单的暴力做法是一层一层遍历数组里的元素,拿到所有的组合,将计算的值和0进行对比。这...

  • LeetCode 四数相加 II

    记录自己啃LeetCode的过程,希望能够坚持!! 一、解题思路 a+b+c+d = 0 a+b = -(c+d)...

  • LeetCode 查找表专题 5:灵活选择键值:4Sum II

    LeetCode 查找表专题 5:灵活选择键值:4Sum II 例1:LeetCode 第 454 题:四数相加 ...

  • 20 - Hard - 四数相加 II

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[...

  • 454. 四数相加 II

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[...

  • 两数相加 II

    题目: 题目的理解: 链表表示整数的每一位,获取出来组成一个整数。两个整数相加等到A。将A转成数组,倒序后存在链表...

  • 两数相加 II

    题目 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相...

网友评论

    本文标题:Leetcode-454 四数相加 II

    本文链接:https://www.haomeiwen.com/subject/dybnoltx.html