【LeetCode】解题18:4Sum

NVIDIA Video Codec SDK-解码接口cuvid简介 特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。 阅读详情

Problem 18: 4Sum [Medium]

Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

The solution set must not contain duplicate quadruplets.

Example:

Given array nums = [1, 0, -1, 0, -2, 2], and target = 0.

A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]

来源:LeetCode

解题思路

与15题3Sum类似。

  • 使用sort()对数组排序。
  • 双层遍历数组,并在第二层循环中数字nums[j]的后续数字nums[j+1]~nums[n-1]中,使用双指针法寻找和为target-nums[i]-nums[j]的两个数。
  • 在双层遍历以及双指针移动过程中注意跳过重复的数字。

减少执行用时的设计:

  • 在N<4时直接返回空。
  • 第一层遍历数组的当前数字nums[i]的四倍若大于target(即nums[i]*4 > target),则之后的循环中必不可能找到四数之和为target的结果,可以直接跳出循环。同理,第二层循环中,若当前数字nums[j]的三倍大于target-nums[i],则也可跳出循环。

排序的时间复杂度O(n log n),遍历时比15题多一层循环,因此遍历数组+双指针过程时间复杂度O(n3),总体时间复杂度O(n3)。

要点:排序、双指针

Solution (Java)

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        int N = nums.length;
        if(N < 4) return result;
        Arrays.sort(nums);
        
        int last1 = nums[0], last2;
        int left, right, temp;
        for(int i = 0; i < N-3; i++){
            if(nums[i]*4 > target) break;
            if(nums[i] == last1 && i > 0) continue;
            last1 = nums[i];
            last2 = nums[i+1];
            for(int j = i+1; j < N-2; j++){
                if(nums[j]*3 > target - nums[i]) break;
                if(nums[j] == last2 && j > i+1) continue;
                last2 = nums[j];
                left = j+1;
                right = N-1;
                while(left < right){
                    if(nums[i] + nums[j] + nums[left] + nums[right] == target){
                        result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
                        temp = nums[left];
                        while(++left < right && nums[left] == temp);
                    }
                    else if(nums[i] + nums[j] + nums[left] + nums[right] > target){
                        temp = nums[right];
                        while(--right > left && nums[right] == temp);
                    }
                    else{
                        temp = nums[left];
                        while(++left < right && nums[left] == temp);
                    }
                }
            }
        }
        return result;
    }
}
CRaxsRat v7.6 安装与使用教程(附工具下载) 摘要:本文介绍远程管理工具CRaxsRat v7.6的合法应用与基本操作,强调仅限授权环境使用。该工具支持多客户端管理、TLS加密及文件/进程控制等功能,适用于内网维护与安全测试。安装需Windows 10/11系统及.NET 4.8,步骤包括解压运行、配置监听端口及生成客户端。文中提醒防火墙设置与杀软误报问题,并重申禁止非法用途,建议在虚拟机或隔离环境学习使用。 阅读详情

相关推荐

【FPGA】安路FPGA下载器驱动安装教程

#来自学渣的问候 最近正在参加19年的FPGA创新设计大赛,然后我们选择了安路(全名:上海安路信息科技有限公司)的 FPGA 开发板。安路算是国产FPGA中还不错的一家,和紫光一样,除了自主生产的FPGA,也开始拥有了自己的编译环境。 好了。言归正传,写这篇博客的原因是,前几天在安装 安路 的编译环境和下载器驱动的时候,出了点问题,弄得心烦意乱。所以打算解决之后写篇博客,避开这个神奇的问题。 首先...

Ninquelote的博客 2万+

LeetCode 18. 4 Sum

题目描述(中等难度) 和3Sum类似,只不过是找四个数,使得和为 target,并且不能有重复的序列。 如果之前没有做过3Sum可以先看看,自己在上边的基础上加了一个循环而已。 public List<List<Integer>> fourSum(int[] num, int target) { Arrays.sort(num); List<List...

wind_liang的博客 542

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

[笔记] 质数(素数)

数学知识 质数 定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数(老版本叫素数)。 质数的判定——试除法(时间O( sprt(n) )) 例题1:AcWing 866. 试除法判定质数 给定n个正整数ai,判定每个数是否是质数。 输入格式 第一行包含整数n。 接下来n行,每行包含一个正整数ai。 输出格式 共n行,其中第 i 行输出第 i 个正整数ai是否为质数,是则输出“Yes”,否则输出“No”。 数据范围 1≤n≤100, 1≤ai≤2∗109 输入样例: 2 2 6 输出样

仅仅是笔记。 611

时空双重机器学习在环境政策评估中的创新应用

因果推断是数据分析中的核心问题,特别是在环境政策评估领域。传统方法如差异分析法(DID)在处理时空维度上的复杂相关性时存在局限。机器学习技术,特别是双重机器学习(DML),通过分阶段建模有效解决了混杂变量问题。结合贝叶斯加性回归树(BART)的灵活建模能力,可以更准确地捕捉空间和时间模式。这种时空双重机器学习(ST-DML)方法在柬埔寨森林砍伐案例中表现出色,通过Wendland基函数有效处理了空间自相关问题。该技术框架不仅适用于环境政策评估,还可扩展至空气质量、水资源管理等其他领域,为政策制定提供更精准的

weixin_28685045的博客 346

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 577

LeetCode #18 fourSum C++

文章目录#18 FourSum leetCode具体实现(C++) #18 FourSum leetCode 解决完三个数字之和,发现又来一个四个数字的和,真的服LeetCode. 这是用C++实现的执行结果,还不错。主要模仿三数之和的写法。感觉没有什么特别好的方法。首先排序然后用双指针。 具体实现(C++) class Solution { public: vector<vect...

weixin_40733134的博客 251

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 527

PAT1007 Maximum Subsequence Sum

题目描述 Given a sequence of K integers { N1, N2, …, NK}. A continuous subsequence is defined to be { Ni, N​i+1 , …, Nj} where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the...

h_18_messi的博客 238

文末含资料链接和视频讲解!YOLOv8+RepVGG+QueryDet小目标检测终极指南:从理论到实战,突破遥感图像检测难题

QueryDet(Query Detection)机制代表了目标检测领域的一个重要范式转变。传统的目标检测方法基于anchor或anchor-free的密集预测,需要为图像中的每个可能位置生成预测。而QueryDet采用了稀疏查询的方式,通过少量的可学习查询向量来直接预测目标。 这种设计灵感来源于Transformer架构中的注意力机制。在自然语言处理中,Transformer通过query-key-value机制实现了高效的序列建模。QueryDet将这一思想引入到目标检测中,将检测问题转化为查询匹配问

FJN110的博客 387

YOLOv13保姆级教程+AKConv模块:可变形卷积+自适应核优化,mAP提升3.23%,召回率&mAP50~95显著提升(论文涨点模块已验证)

本文介绍了一种改进的YOLOv13-AKConv模型,通过引入AKConv模块显著提升了目标检测性能。实验结果表明,优化后的模型(绿色曲线)相比原模型(蓝色曲线)在mAP指标上提升了3.23个点,同时召回率、mAP50-95等指标均有明显提升。作者详细阐述了模型移植过程,包括创建yolov13-AKConv.yaml配置文件,修改tasks.py和modules/init.py文件,以及实现AKConv模块的核心代码。该模块采用可变形卷积思想,通过动态生成采样点位置来增强特征提取能力,并集成了BN和SiLU

FJN110的博客 2611

Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想

1题目理解Leetcode不少题目是成一个体系的,这道题是找四数之和等于四数之和的题,之前还有2Sum和3Sum,我也已经做了题目的小节,可以点开进行查看。 Leetcode #15 3Sum 三数之和 解题小节 Leetcode #1 Two Sum 解题小结和之前的问题一样,有如下的限制: 1、最终输出的顺序是非降序的(所以我们首先需要排序) 2、不能输出重复的解(所以我们要注意移动)

MebiuW的专栏 4148

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 568

[leetcode] 18. 4Sum 解题报告

题目链接:https://leetcode.com/problems/4sum/ Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which

小榕流光的专栏 662

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

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

leetcode解题报告18. 4Sum

leetcode解题报告18. 4Sum题目地址 难度是medium题目描述和3SUM问题类似,输入一个整数数组,和一个目标整数target。从数组中选择4个数,使得这四个数之和等于arget。现在要求找出所有满足要求的四元组,并且要求这些四元组之间不重复(其中四元组里的元素是没有顺序的,即(1,2,3,4)和(4,3,2,1)是同一个四元组)我的思路在会做3sum问题的基础上,4sum问题就很简单

sysu_xiaoming的博客 371

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

leetcode解题之 18. 4Sum Java版

4Sum Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum o...

he_zhen_的博客 224

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode - 解题笔记 - 18 - 4Sum

4Sum Solution 1 作为NP问题复杂度讲解过程中常用的一个例子,4Sum注定是不会有特别理想的解法的。因此这里我就直接拿3Sum的双指针维护思路进行扩展,将第一个位置的顺序枚举改造成两层的顺序枚举。对应地可以进行推广到任意个数的和:前K-2个维度使用顺序遍历,后续使用双指针维护寻找后面两个数。 时间复杂度:O(N3)O(N^3)O(N3),其中NNN为输入数字个数,对于任意个数的和检查,时间复杂度对应为O(Nk−1)O(N^{k - 1})O(Nk−1) 空间复杂度:O(N)O(N)O(N),

支锦铭的博客 258

【LeetCode】18. 4Sum Closest 解题报告(Python)

题目分析: 这道题目与3Sum类似,只是变成了4Sum,可以再3Sum外加一层循环解决,在网上看到了另一种解法,先两两相加存到字典里,再双循环让目标减去两个数看结果是否在字典里,时间复杂度由O(n3)变为O(n2),所以我提供两种解法。第一种方法使用了字典,用空间换取时间,消耗大概是160ms,第二种消耗大概是1000ms。 第一种:字典查询法 代码说明: 1、双循环生成字典 for i in r...

L141210113的专栏 241

Leetcode18 :4sum 解题报告

int cmp(const void*a,const void*b){ return *(int *)a-*(int *)b; } int** fourSum(int* nums, int numsSize, int target, int* returnSize) { if(numsSize&lt;4)return 0; qsort(nums,numsSize,sizeo...

李威的博客 236

leetcode 18. 4Sum

''' 给定输入数组,输出4元对列表,列表中每个元素是一个列表,子列表数值之和为target ''' class Solution: def fourSum(self, nums, target: int): def select_sort(nums): # 对输入数据进行选择排序 # 选择排序算法是对冒泡排序算法的改进 ...

WYXHAHAHA123的博客 208

【LeetCode】18. 4Sum 解题小结

题目: Given an arraySofnintegers, are there elementsa,b,c, anddinSsuch thata+b+c+d= target? Find all unique quadruplets in the array which gives the sum of target. Note:The solutio...

weixin_30613727的博客 114

[Leetcode] 18. 4Sum 解题报告

题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: The

魔豆(Magicbean)的博客 434

leetCode 18.4Sum (4数字和) 解题思路和方法

4Sum  Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: Elemen

Android进阶 668

leetcode解题之 18. 4Sum Java版(结果是目标值的四个数字和)

leetcode解题之 18. 4Sum Java版(结果是目标值的四个数字和)

mine_song的博客 1257

LeetCode 18. 4Sum

题目 思路 双指针 代码 class Solution: def fourSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[List[int]] """ re...

SparkSnail 167

leetcode18 4Sum

题目描述 Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum o...

yaotai8135的博客 163
上一篇: 【LeetCode】解题16:3Sum Closest
下一篇: 【LeetCode】解题26:Remove Duplicates from Sorted Array
Fayedy
博客等级 码龄11年 2粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值