首页 > 其他分享 >LeetCode 454.四数相加 II

LeetCode 454.四数相加 II

时间:2023-10-23 22:26:21浏览次数:31  
标签:四数 HashMap int 相加 454 II 数组 nums1

题目描述

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

描述

image

第一次提交的代码

import java.util.Map;
import java.util.HashMap;
class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        //四数相加退化成两数之和,但是时复会变为O(n^2)
        int lenOfMul=nums1.length*nums1.length;

        int count=0;
        int minus=0;
        Map<Integer,Integer> map = new HashMap<>();

        for(int i=0;i<nums1.length;i++){
           for(int j=0;j<nums1.length;j++){
               int temp=nums1[i]+nums2[j];
               if(map.containsKey(temp)){
                   map.put(temp,map.get(temp)+1);
               }else{
                   map.put(temp,1);
               }
           }
        }

        for(int i=0;i<nums1.length;i++){
            for(int j=0;j<nums1.length;j++){
                minus=(0-(nums3[i]+nums4[j]));
                if(map.containsKey(minus)){
                    count+=map.get(minus);
                }
            }
        }

        return count;
    }
}

结果图:
image

思路:
四数相加退化成两数之和,但是O(n)会变成O(n^2),没办法,给的数组有四个,这个时间复杂度相对还正常的- -,也不能说退化成两数之和吧,毕竟两数之和的代码逻辑搞不好的话执行时间就差的比较多了。
因为这个题目并不需要返回元组索引,所以在遍历前两个数组的时候,用HashMap来存储各个索引相加的值(键),索引值相加结果出现的次数作为值,这样在遍历后两个数组的时候,就可以知道当前两个索引相加结果在之前两个数组出现的次数,变相的实现了(i, j, k, l)。

学习到的东西

我Java基础还是菜,map.getOrDefault(key,initVal)这个方法居然都没想起来,菜狗啊...
用了map的这个方法,执行速度快了不少。

更新的代码如下:

import java.util.Map;
import java.util.HashMap;
class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        //四数之和退化成两数之和,但是时复会变为O(n^2)
        int lenOfMul=nums1.length*nums1.length;

        int count=0;
        int minus=0;
        Map<Integer,Integer> map = new HashMap<>();

        for(int i=0;i<nums1.length;i++){
           for(int j=0;j<nums1.length;j++){
               int temp=nums1[i]+nums2[j];
               map.put(temp,map.getOrDefault(temp,0)+1);
           }
        }

        for(int i=0;i<nums1.length;i++){
            for(int j=0;j<nums1.length;j++){
                minus=(0-(nums3[i]+nums4[j]));
                count+=map.getOrDefault(minus,0);
            }
        }

        return count;
    }
}

执行效果如下图:
image

标签:四数,HashMap,int,相加,454,II,数组,nums1
From: https://www.cnblogs.com/whitePuPigeon/p/17783616.html

相关文章

  • 删除排序数组中的重复项 II
    删除排序数组中的重复项II分析设置两个指针一个跑全数组的,一个选择可被覆盖的位置因为是有序的,要保留n个就将慢指针往后推n个代码/***下面代码是保留两个*@param{number[]}nums*@return{number}*/varremoveDuplicates=function(nums){if(nums.le......
  • The 2021 CCPC Guilin Onsite (XXII Open Cup, Grand Prix of EDG)
    Preface昨天下午16:30~21:30刚打完CCPC2021的广州,今天早上九点又开始打这场桂林,压力拉满了属于是这场比起昨天那场良心太多了,开场还挺顺(虽然因为写Dijkstra偷懒TLE了四发),但开题啥的都是见一个会一个中期虽然有点卡但因为祁神会了几何所以没有空机,然后再点完外卖后我突然顿悟把BK......
  • 80. 删除有序数组中的重复项 II
    给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。示例1:输入:nums=[1,1,1,2,2,3]输出:5,nums=[1,1,2,2,3]......
  • ASCII编码表
    ASCII美国信息交换标准码AmericanStandardCodeforInformationInterchangeDecimalOctalHexBinaryValue--------------------------00000000000000000NUL(Nullchar.)00100100100000001SOH......
  • 350. 两个数组的交集 II
    目录题目法一、排序+双指针法二、网友一行解法题目给你两个整数数组 nums1和nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例1:输入:nums1......
  • RAII
    RAII(ResourceAcquisitionIsInitialization)翻译过来就是资源获取即初始化,更准确的表达是使用对象来管理资源。单纯依靠new和delete的期望执行是行不通的,甚至有时会有隐藏new的资源(比如函数返回的资源)。因此我们寄希望于析构函数自动调用的机制来确保资源释放。对于局部作用域......
  • LeetCode142. 环形链表 II
    题目描述给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如......
  • 代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转
    344.反转字符串双指针法时间复杂度为:O(n),空间复杂度为:O(1)classSolution:defreverseString(self,s:List[str])->None:"""Donotreturnanything,modifysin-placeinstead."""left,right=0,len(s......
  • ACS系列(6) ACS QT版SPiiPlusClibraryDemo
    工程文件QT+=coreguigreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsCONFIG+=c++17#YoucanmakeyourcodefailtocompileifitusesdeprecatedAPIs.#Inordertodoso,uncommentthefollowingline.#DEFINES+=QT_DISABLE_DEPRECATED_BEFORE=0x......
  • [vue]精宏技术部试用期学习笔记 II
    精宏技术部试用期学习笔记(vue)router:vue的模拟路由前置准备安装vue-routerpnpmivue-router@4//安装版本4的vue-router可以在package.json文件中查看依赖"dependencies":{"vue":"^3.3.4","vue-router":"4"//这里},新建文件夹/src......