18. 四数之和(JS实现)

题18. 四数之和 Java class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> quadruplets = new ArrayList<List<Integer>>(); if (nums == null || nums.length < 4) { ... 阅读详情

1 题目

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]

2 思路

这道题还是利用了排序 + 双指针 + 散列表去重的方法解决,与三数之和相比多加了一层循环

3代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[][]}
 */
var fourSum = function(nums, target) {
    if (nums.length < 4) return [];
    nums.sort(function(a,b){
        return a-b;
    });

    var map = {};
    var result = [];
    var sum;
    var key;
    var filterMap = {};
    for (var i=0; i<nums.length-3; i++) {
        if (i > 0 && nums[i] == nums[i-1]) continue;

        var min = nums[i] + nums[i+1] + nums[i+2] + nums[i+3];
        if (min > target) break;  //最小的四个数加起来都太大,那么久彻底没戏了

        var max = nums[i] + nums[nums.length-1] + nums[nums.length-2] + nums[nums.length-3];
        if (max < target) continue;  //当前数加上其余最大的三个数,仍然比较小,那么说明当前数太小了


        for (var j=i+1; j<nums.length-2; j++) {
            var left = j + 1;
            var right = nums.length - 1;

            while(left < right) {
                sum = nums[i] + nums[j] + nums[left] + nums[right];
                if (sum === target) {
                    key =  '' + nums[i] + nums[j] + nums[left] + nums[right];
                    if (!map[key]) {
                        result.push([nums[i], nums[j], nums[left], nums[right]]);
                        map[key] = true;
                    }
                    left++;
                    right--; 
                } else if (sum > target) {
                    right--;
                } else {
                    left++;
                }
            }
        }
    }

    return result;
};
揭秘N531:这颗不到2毛钱的国产栅极驱动器,如何成为功率开关的“全能搭档”? 本文深入解析了国产栅极驱动器N531如何成为功率开关的“全能搭档”。针对MOSFET和IGBT等电压驱动器件在实际应用中需要大电流实现快速开关的核心痛点,N531凭借±500mA的强劲驱动能力、宽电压供电及高兼容性,有效降低开关损耗,提升系统效率与可靠性。文章通过实战案例与设计指南,阐述了这颗高性价比芯片在简化设计、降低成本方面的显著优势。 阅读详情

相关推荐

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

力扣——四数之和Ⅲ(JavaScript)

我们先计算数组1和数组2的各个元素的和sum1以及他们出现的次数,将其放在一个数组中newMap中,随后计算数组3和数组4中各个元素的元素和sum2,判断0-sum2在数组newMap中出现的次数。

qq_52604211的博客 298

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

18. 四数之和

LeetCode: 18. 四数之和 递归回溯, 只[去重]必然超时 重点剪枝 先对 数组 nums 排序(从小到大) >> 方便剪枝 当接下的可选择的元素不够 list 添加到 4 位时,可提前退出了 在递归的同一层中,第二轮开始,当前的元素与前一个相同,跳过。>> 去重 在这一步实现 当前数 + 已累加的和 + 下一个元素 * list 剩余还能加入数的个数 ,如果大于target,所以往后的再加都会继续大于, 可以直接退出了 当前数 + 已累加的和 + 数组中最后一个元

lankerens 428

摄像头模组选型避坑指南:如何根据Sensor和Lens参数匹配最佳组合

本文深入解析摄像头模组选型中Sensor与Lens的核心参数匹配要点。重点阐述了主光线角(CRA)匹配对边缘画质的关键影响,并提供了传感器尺寸、像素尺寸、焦距、光圈等参数的协同选型策略与实战避坑指南,帮助工程师在手机、安防、车载等不同应用场景下实现性能与成本的最佳平衡。

ee345的博客 618

在overleaf中使用bibtex引用参考文献

最近在挑选写tex的平台,挑来挑去,个人感觉overleaf给我带来的体验感是最舒适的。不过由于对内部的文件组织和make进行了一层封装,所以与一般的本地平台编译tex会有一点不同。此处写一下在overleaf中使用bibtex的方法。 在tex中使用bibtex引用文献是一件很舒适的事,毕竟这是tex的优点之一(要是tex比word难用,我干什么不去用word,hhh) 第一步,我们创建一个.bib文件,名字随便起,我这边起为reference.bib。 然后打开谷歌学术,搜索你想要引用的文章,并找到

锦恢的博客 4万+

LeetCode-18-四数之和

18. 四数之和 说明 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0

LQZme的博客 1471

MATLAB 论文复现——基于虚拟储能的电动汽车充放电调度策略及激励评价

文章基于虚拟储能聚合体仿真模型优化电动汽车充放电调度,并采用复合权重评价电动汽车的充电激励。根据电动汽车灵活性和系统稳定性衡量其贡献大小,并通过模糊推理系统模拟用户的充电意愿,实现对电动汽车充电的引导和优化。[1]陈朔,胡昊,方慧敏,等.基于虚拟储能的电动汽车充放电调度策略及激励评价[J/OL].系统仿真学报,1-12[2024-07-24].https://doi.org/10.16182/j.issn1004731x.joss.23-1316.基于虚拟储能的电动汽车充放电调度策略及激励评价。

sjr1478的博客 363

LeetCode - 18 四数之和

四数之和:固定四元组中最小两个值的索引 i,j,然后定义双指针 L = j + 1,R = len(nums) - 1,如果此时四元组之和 sum = nums[i] + nums[j] + nums[L] + nums[R]因此当 nums[i] == nums[i-1] 时,我们可以跳过,比如上图 i = 1,j=2 的过程可以跳过,因为产生的必然时重复的四元组。如上图所示,红色框部分,其中 j 的位置相同,L,R的运动过程也相同,只是 i 的位置发生了变化,但是 i 指向的元素值时没有改变的。

优快云 1136

Python爬虫实战:逆向解析央视频加密参数(附完整代码)

本文详细解析了央视频加密体系的技术实现,通过Python逆向工程实战演示如何解密动态密钥、AES加密和自定义哈希算法等核心组件。文章提供完整代码示例,涵盖GUID生成、参数构造和异步请求处理,帮助开发者掌握现代视频平台的反爬机制破解方法。

weixin_42532473的博客 1130

1分钟了解LangChain是什么?

是一个基于大型语言模型(LLM)开发应用程序的框架, 它旨在简化语言模型应用的开发流程,特别是在构建对话系统和其他基于语言的AI解决方案时.目标是将复杂的语言模型技术转化为可通过简单API调用实现的功能,从而使开发者能够更加专注于创造性的解决方案设计。高效地解决了开发大语言模型应用的痛点问题。Langchain 最主要的特色是可以将 LLM 应用研发过程中的交互 Prompt、LLM 模型调用、语言模型与环境互动的自适应等方式融为一体。

gorgor在码农 2630

JS力扣刷题18. 四数之和

var fourSum = function(nums, target) { //排序 nums = nums.sort(function(a, b){ return a - b; }) let res = []; //left,right代表左右区间;用两层for循环遍历 for(let left = 0;left < nums.length - 3; left++){ //left后移的时候检查是不是和前面left一.

Candy_Rainbow_的博客 227

基于simulink的低通滤波器(Low-pass Filter, LPF)

摘要:本文详细介绍了如何在Simulink中搭建低通滤波器进行噪声抑制仿真。通过定义系统需求(50Hz信号+250Hz噪声)、添加信号源、设计6阶巴特沃斯低通滤波器(截止频率100Hz)、连接各模块并配置仿真参数,最终实现高频噪声的有效滤除。该教程包含从模型创建到结果分析的完整流程,为信号处理系统开发提供了基础框架,并可进一步扩展为自适应滤波等高级应用。所需MATLAB版本为R2023a及以上,需安装Simulink和DSPSystemToolbox。

amy_mhd的博客 1303

【题解】【LeetCode】18. 四数之和

18. 四数之和 原题传送:LeetCode 18. 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2,

葑鈊丶 382

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Leetcode 18】js四数之和

四数之和 题目 给定一个包含 n 个整数的数组nums,判断 nums 中是否存在四个元素a,b,c,d ,使得 a + b + c + d = 0 ?找出所有满足条件且不重复的四元组。 注意:答案中不可以包含重复的四元组。 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ] 思路 你已经经历了两数之和、三数之和,玩玩没想到

一只蒻蒻的博客 275

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【LeetCode 18】四数之和

题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2

公众号:前端充电宝 497

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode -- 18. 四数之和(中等)

本文介绍了LeetCode 18题"四数之和"的解法。通过数组排序和双指针技术,将时间复杂度优化至O(n³)。

wuhen_n的博客 623

数组:1 两数之和、15 三数之和、18 四数之和

数组:1两数之和、15三数之和、18四数之和 文章目录数组:1两数之和、15三数之和、18四数之和两数之和三数之和四数之和 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素 示例: 给定 nums = [2, 7, 11, 15], ...

Programmer Jett 735

LeetCode 分类刷题:18. 四数之和

这是一道关于在数组中寻找四数之和等于目标值的算法题。文章详细解析了如何通过双指针法优化求解过程:先对数组排序,然后通过两重循环枚举前两个数,再用双指针寻找后两个数。关键优化点包括:提前判断枚举边界条件、跳过重复元素、利用排序特性剪枝。时间复杂度为O(n³),空间复杂度为O(1)。给出的JavaScript实现代码清晰展示了这一思路,适合准备算法面试的开发者参考学习。

flashlight_hi的博客 875

【JS力扣刷题笔记】18. 四数之和

以下是学习题解时自己的一些理解与笔记,有错误欢迎指正与讨论。

Jamcy123的博客 575

【哈希表】leetcode18. 四数之和(C/C++/Java/Python/Js)

四数之和,和15.三数之和是一个思路,都是使用双指针法, 基本解法就是在15.三数之和的基础上再套一层for循环。

Eumenides_Suki的博客 606

力扣18. 四数之和(JavaScript)

力扣18. 四数之和(JavaScript)

csD_Dscnnnnnnn的博客 608

LeetCode题解:18. 四数之和,哈希表,JavaScript,详细注释

原题连接:https://leetcode-cn.com/problems/4sum/ 解题思路: 该题是15. 三数之和的进阶版,如果你对三数之和不熟悉,可以先参考我的题解LeetCode题解:15. 三数之和,JavaScript双循环+HashMap,详细注释。 使用哈希表,可以在一次循环中,找到两数之和,可以参考LeetCode题解:1. 两数之和,JavaScript,HashMap单次遍历,详细注释。具体做法是在遍历时,缓存当前值与结果之差,例如map.set(target - nums[i]

Lee Chen的博客 273

18.四数之和

题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为:...

Demonre的博客 196
上一篇: 16. 最接近的三数之和(JS实现)
下一篇: 19. 删除链表的倒数第N个节点(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值