leecode18 四数之和

『Apisix进阶(九)』基于Upstream实现服务转发的最佳实践 本篇文章将以服务转发为核心,带你从原理到实战,深入了解 Upstream 的配置方法与常用场景。 阅读详情

在这里插入图片描述

我的思路

感觉四数之和和三数之和没什么区别,就将其转化为三数,再转换为两数,就是再三数之和外面再套一层循环而已。

  • 这个题的难点在于,这个h,i,j,k四个参数,我们如何编写代码,能够实现去重操作
    |h和i都是外层循环,我们要再循环开始要对其进行去重,j和k是内部代码和三数之和的去重方式一样。
    而i的去重和h有关,不再像是三数之和的那样,当i大于0的时候就可以去重了。
  • 这个题还有一个需要注意的地方就是这个类型转换,这个四个数的和超出了这个int的范围,所以我们需要在四数相加的地方进行强制类型转换。
public List<List<Integer>> fourSum(int[] nums, int target) {
    //感觉四数之和和三数之和没什么区别,就将其转化为三数,再转换为两数
    Arrays.sort(nums);
    int n = nums.length;
    List<List<Integer>> ans = new ArrayList<>();
    for(int h = 0; h<n-3;h++){
        if(h>0&&nums[h]==nums[h-1]){
            continue;
        }
        if((long)nums[h]+nums[h+1]+nums[h+2]+nums[h+3]>target){
            break;
        }
        if((long)nums[h]+nums[n-1]+nums[n-2]+nums[n-3]<target){
            continue;
        }
        for(int i = h+1;i<n-2;i++){
            if(i>h+1&&nums[i]==nums[i-1]){
                continue;
            }
            int j  = i+1;
            int k = n-1;
            
            while(j<k){
                long x = (long) nums[h]+nums[i]+nums[j]+nums[k];
                if(x<target){
                    j++;
                }else if(x>target){
                    k--;
                }else {
                    ans.add(Arrays.asList( nums[h],nums[i],nums[j],nums[k]));
                    j++;
                    while(j<k&&nums[j]==nums[j-1]) j++;
                    k--;
                    while(j<k&&nums[k]==nums[k+1]) k--;
                }
            }
        }
    }
    return ans;
}

灵神的思路

灵神的思路和我一样,只不过他比我多优化了,我只在h的循环中进行了优化,灵神再i的循环中也进行了优化。

for (int b = a + 1; b < n - 2; b++) { // 枚举第二个数
                long y = nums[b];
                if (b > a + 1 && y == nums[b - 1]) continue; // 跳过重复数字
                if (x + y + nums[b + 1] + nums[b + 2] > target) break; // 优化一
                if (x + y + nums[n - 2] + nums[n - 1] < target) continue; // 优化二
作者:灵茶山艾府
链接:https://leetcode.cn/problems/4sum/solutions/2344514/ji-zhi-you-hua-ji-yu-san-shu-zhi-he-de-z-1f0b/
AutoSAR配置视频讲解:新建DaVinci工程 AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违 阅读详情

相关推荐

利用CiteSpace实现知网专利文献的高效计量与可视化分析

本文详细介绍了如何利用CiteSpace软件对中国知网(CNKI)的专利文献进行高效的文献计量与可视化分析。文章提供了从数据获取、格式转换、参数设置到图谱解读的完整工作流,旨在帮助研究者快速掌握该工具,从而洞察技术领域的研究热点、核心机构、学者合作网络及发展趋势,提升专利情报分析效率。

weixin_28520495的博客 292

Leecode18. 四数之和

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

qq_22017379的博客 180

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1153

Leecode 18. 四数之和

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

子冉冰清的博客 368

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统,一款基于ThinkPHP+Layui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装鞋帽、化妆品、机械机电、家具装潢、建材行业、快销品、母婴用品、办公用品、汽配汽修、生鲜农贸、手机通讯、数码家电、医药用品、制造业、信息技术服务行业等。提供全部无加密服务端和前端源代码,独立部署,不受限制。

u011092458的博客 788

Fluent动网格+滑移网格+重叠网格对比介绍(以震荡水翼flapping foil为例)

初学fluent笔记,本文主要包含: Flapping foil在fluent内的几种实现方式 在哪设置动网格、滑移、重叠网格 flapping的UDF 示例 写在前面:Fluent在预览网格运动/提交计算之前,注意保存一个cas版本。 -------------------------Flapping foil 网格几种组合实现方式:---------------------- 直接重叠网格,overset, 需要建立两个几何part,part要重合。水翼局部区域(component),背景网格(ba

深海民工CFDer 2万+

leecode 18. 四数之和

18. 四数之和 四数之和与前面三数之和的思路几乎是一样的,嗝。(刚好前些天才写了三数之和的题解) 如果前面的三数之和会做了的话,这里其实就是在前面的基础上多添加一个遍历的指针而已。会做三数之和的可以不用看下面的了。 使用四个指针(a<b<c<d)。固定最小的a和b在左边,c=b+1,d=_size-1 移动两个指针包夹求解。保存使得nums[a]+nums[b]+nums[c]+nums[d]==target的解。偏大时d左移,偏小时c...

maocaicai的博客 339

STM32 CubeMX LwIP + freertOS 移植

生成代码,烧录即可ping通。这里要注意的是,要修改freertOS的任务栈大小,默认128,修改为1024,不修改就跑不起来。生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本地网卡在同一网段。在以上无系统的cubeMX配置下继续添加freertOS。无系统LWIP协议栈设置,静态IP地址,关闭DHCP。先用裸机测试LAN8742A的网卡驱动。MCU型号:STM32F746NGH。下面进行freertOS系统移植。网卡型号:LAN8742A。系统时钟和时基定时器如下。

u011625775的博客 1374

leecode18—— 四数之和

4数之和 四数之和||

wish9968的博客 171

基于最小二乘法蒙特卡洛模拟(LSM)可转债定价原理及算法演示

可转换债券是一种极其复杂的信用衍生产品,除了一般债权外,它还包含着多个期权,包括转股权、回售权、赎回权和发行人的转股价格修正权,条款的复杂性决定了可转债定价的复杂性。可转债定价方法较为普遍的是依据B-S期权定价公式和二叉树模型,在对内嵌期权定价的基础上,加上纯债的价值,从而对可转债进行定价。但是可转债附加的期权不仅仅是一个美式期权,而是附加了赎回、回售和下修等特殊条款,以上定价方法仅可看做对可转债价值的近似估计,难以对其中的条款博弈进行定价。

weixin_43971191的博客 1729

数仓建模—数据治理框架选型

全名主要亮点覆盖面最广:从数据治理、架构、质量、安全到元数据、主数据、数据仓库等等,几乎所有数据管理主题都能在DMBOK里找到相应章节。概念权威统一:帮助组织建立通用术语和知识基础,减少“部门之间说法不一致”的沟通成本。适用场景:如果你所在公司(或团队)正准备系统梳理数据管理的方方面面,DMBOK是一份非常全面的指导手册,尤其适合培养新人或为整个组织统一认知。需要注意:DMBOK偏“知识指引”,不直接提供成熟度模型或实施路线图。想要落地,还需要结合其他评估模型或项目管理方法。小案例举例:某。

2401_84052244的博客 4743

Leecode刷题之路第18天之四数之和

代码示例:(Java)代码示例:(Java)

工一木子 569

零基础实战:用 Docker 和 vLLM 本地部署 BGE-M3 文本嵌入模型

BGE-M3是北京智源推出的多功能文本嵌入模型,支持跨语言语义匹配。利用Docker容器化和vLLM框架可高效部署该模型,实现本地运行的优势包括隐私保护、定制化和成本控制。通过配置Docker环境,使用vLLM官方镜像加载模型,并进行文本嵌入测试验证效果。该方案适合开发者快速验证模型能力,或集成到本地NLP流程中。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4953

LeeCode 18: 四数之和

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

跟心爱的人一起浪迹天涯 209

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

go语言LeeCode刷题记:18. 四数之和

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

Duan_YZ的博客 381

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

代码随想录算法训练营Day07||Leecode.454四数相加、Leecode.383赎金信、Leecode.15三数之和、Leecode.18四数之和

3.在确定下标元素以后,双指针查值的时候,也要考虑去重的操作。简单的数组哈希表,我的实现思路是,把magezine这个字符串先存起来,表示可用的字母数量,然后遍历ranstomNote数组,对哈希表内的次数进行递减,最后检查哈希数组,如果出现负数,就代表着有不够用的字母,返回false,否则就返回true。今天运用的map操作和昨天相比,今天采用了umap[a+b]++直接对相同key值进行value自增,相当于一个计数器,而昨天是用map来作为一个存储工具,用的是.insert({})添加键值对的方法。

jiegongzhu3z的博客 1799

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

08 四数之和(leecode 18)

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 解

weixin_42454048的博客 169

LeeCode||454. 四数相加 II 383. 赎金信 ● 15. 三数之和 18. 四数之和

思路:利用双指针算法将所有符合条件并去重的结果填入二维数组result里,最后return result:首先利用i指针遍历数组nums,再用left和right指针分别从两侧向中间移动直到left > right,在此过程中通过left和right和i指针的移动进行去重。思路:先便利a,b数组,统计a + b出现的次数,再便利c,d数组,看umap映射里是否出现0 - (c + d) 的值,如果出现,就让count加上umap里值等于0 - (c + d)的个数。新的一周又是补进度的一周。

2302_78039690的博客 1307

【LeeCode】18.四数之和

18.四数之和

LeeYotta的博客 551

Leecode 18. 四数之和 排序+双指针

原题链接:Leecode 18. 四数之和 注意数据范围,这题和之前的Leecode 15. 三数之和 双指针的思路基本一致,都是排序+双指针,但是此题中nums数组中数据较大,4数相加可能爆int,要注意数据范围的判断。 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<in

想买很多漂亮衣服但是买不起的博客 264

js + leecode刷题:No.18四数之和

参考链接地址:https://www.jianshu.com/p/67abdbdac5c1 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0...

qq_34425377的博客 303

【算法专题--双指针算法】leecode-15.三数之和(medium)、leecode-18. 四数之和(medium)

双指针常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。对撞指针:一般用于顺序结构中,也称左右指针。对撞指针从两端向中间移动。一个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。对撞指针的终止条件一般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:left == right (两个指针指向同一个位置)left > right (两个指针错开)快慢指针:又称为龟兔赛跑算法,其基本思想就是使用两个移动速度不同的指针在数组或链表等序列结构上移动。

RO-BERRY 2730

leecode_python中档题: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] ] class So

winnerziqi的博客 254

Leecode.454 四数相加Ⅱ、383 赎金信、15 三数之和、18 四数之和 | 代码随想录训练营第7天

Leecode.454 四数相加Ⅱ、383 赎金信、15 三数之和、18 四数之和

lv364365706的博客 180

代码随想录算法训练营第七天 | LeeCode 454. 四数相加 II,383. 赎金信,15. 三数之和 ,18. 四数之和

最后选择了双指针法解题,很巧妙的方法,虽然要找三个元素,但是通过固定一个首元素,然后在第二层循环里利用双指针法同时对剩下两个值进行操作,就能做到用双重循环找三个数。第二就是用map.coumt()函数的返回值不是计数的值,而是1或0,找得到就1,找不到就0;做题方法和leecode 15.三数之和一模一样,通过双指针来去掉一层循环,实现时间复杂度下降一个指数级别,从o(n^4)变成o(n^3),唯一要注意的是,本题相加的结果在leecode上会溢出,要在相加式子前加上(long)来强制类型转换成长整型。

thels_的博客 549

Leecode18_fourSum

Leecode 18 思路: 两数之和用双指针,三数之和,固定第一个,再用双指针,四数之和再三数之和上多家一层循环就好了,另外注意同一个位置得前后两个数字不要重复。 代码: std::vector<std::vector<int>> Leecode18_fourSum(std::vector<int>& nums, int target){ sort(nums.begin(), nums.end()); std::vector<std::vector&l

lin 3511
上一篇: leecode16 最接近的三数之和
下一篇: leecode611 有效三角形的个数
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值