Leetcode 454. 四数相加 II

105 阅读1分钟

454. 四数相加 II - 力扣(LeetCode)

思想

这道题暴力的写法就是把这四个数组全部遍历一下,也就是O(n^4)时间复杂度

如果用哈希的话,只用遍历前两个数组。

然后检查后两个数组,检查它们的和的负值是否存在于map中。如果存在,添加到计数中。

map哈希

学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili

LeetCode刷题|python版本|第454题|四数相加II_哔哩哔哩_bilibili

code

count用来存放全部次数,初始为0;

map先遍历前两个数组,也就是存放一半的次数。

当后两个数组中有满足条件时,再把后两个的次数加进count里面。

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {

            int count=0;
        unordered_map<int,int> m;
        for(int a:nums1)
        {
            for(int b:nums2)
            {
                m[a+b]++;
            }
        }
    
        for(int c:nums3)
        {
            for(int d:nums4)
            {
                  if (m.find(0- (c + d)) != m.end())
                {
                    count+=m[0-(c+d)];
                }
            }
        }

        return count;
    }
};