算法力扣刷题记录 二十【18题. 四数之和】

前言

哈希篇,继续。
记录 二十【18题. 四数之和】


一、题目阅读

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

1 <= nums.length <= 200
-10^9 <= nums[i] <= 10^9
-10^9 <= target <= 10^9

二、尝试实现

学过“三数之和”,同法炮制可以求解4数之和。但是同样有问题需要注意,先上代码,再说细节点:

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());//排序vector<vector<int>> result;if((nums[nums.size()-1] < 0 && target >= 0) || (nums[0] > 0 && target <= 0)){return result;}for(int a = 0;a < nums.size();a++){if(a > 0 && nums[a] == nums[a-1]){  //a去重continue;}for(int b = a+1;b < nums.size();b++){if((b-1 > a) && nums[b] == nums[b-1]){///b-1>a。continue;}int c = b+1;int d = nums.size()-1;while(c < d){if(nums[a] + nums[b] > target - nums[c] - nums[d]){d--;}else if(nums[a] + nums[b] < target- nums[c]- nums[d]){c++;}else{result.push_back({nums[a],nums[b],nums[c],nums[d]});while(c < d && nums[d] == nums[d-1]){d--;}while(c < d && nums[c] == nums[c+1]){c++;}c++;d--;}}}}return result;}
};

细节及区别:

  • a,b,c,d分别去重;用c、d作为活动区间,所以c,d去重两个while,注意c<d即可;a去重,保证下标不违法,逐步后移。

    • 重点是b去重,第二层循环,b=a+1,从a+1开始,所以去重应该(b-1 > a),否则nums[b]和nums[a]比较,错误。另外因为先b++再去重,所以nums[b]和nums[b-1]比较。
  • 直接返回部分:

     if((nums[nums.size()-1] < 0 && target >= 0) || (nums[0] > 0 && target <= 0)){return result;}
    
    • target不再是0,nums元素有正有负(注意提示)。所以能够直接返回的条件是:
    • nums全为负,target >=0,肯定空;
    • nums全为正,target <=0,肯定空;
  • 提示:-109 <= nums[i] <= 109,说明可能(nums[a] + nums[b] +nums[c] + nums[d])超出“int”类型范围,导致运行错误。

    • 怎么控制求和不超过int类型最大值?
    • 把nums[c] + nums[d]移到等式的右边,3个109相加超过int,2个109相加可以不超过int范围。

代码随想录学习

学习内容

思路:同思路。

代码实现区别

  • 去重——操作一样。回顾细节部分第一点;

  • 剪枝:有所区别。回顾细节部分第二点;

    • 参考给出的剪枝操作,分别在第一层a所在循环和第二层b所在循环。
    • 第一层循环剪枝:(nums[a] > target && nums[a] > 0 )。解释原因:nums[a]>0,后面的肯定也是大于0(排过序),加正数会越加越大。所以可以break;
    • 第二层循环剪枝:(nums[a] +nums[b]> target && nums[a] +nums[b] >= 0 ),把nums[a] +nums[b]看作一个整体。为什么呢?
      • target>=0时候肯定没有问题;
      • 当target < 0,nums[a] +nums[b] >= 0,那么nums[b] 一定>= 0,保证nums[b]后面都是正数,往后会越加越大,所以可以break;
      • 如果只是nums[b] >= 0,可以吗?可以。因为nums[b]往后都是正数,加正数会越加越大。在nums[a] +nums[b]> target的基础上。
      • 所以第一个条件得是nums[a] +nums[b]> target 。
  • 超出范围怎么处理?回顾细节部分第三点;

    • 直接转换成long类型。

总结

和“三数之和”思路一致,但同样有细节需要主要:3点。

(欢迎指正,转载表明出处)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要本地化您的多媒体内容?

当我们访问网站、应用程序和社交媒体时&#xff0c;体验不再局限于陈旧的文本和静态图像。现代处理能力和连接速度提高了快速加载视频、音频和动画的可能性。 这一切都提供了更具沉浸感和互动性的用户体验。多媒体是数字营销中最有效的内容之一&#xff0c;因为它对用户更具吸…

vue-cli 项目打包优化-基础篇

1、项目打包完运行空白 引用资源路径问题&#xff0c;打包完的【index.html】文件引用其他文件的引用地址不对 参考配置&#xff1a;https://cli.vuejs.org/zh/config 修改vue.config.js &#xff0c;根据与 后端 或 运维 沟通修改 module.export {// 默认 publicPath: //…

使用API有效率地管理Dynadot域名,为文件夹中的域名设置域名转发

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

全彩屏负氧离子监测站

TH-FZ5在追求绿色生态、健康出行的今天&#xff0c;景区不仅仅是人们休闲游玩的好去处&#xff0c;更是人们体验大自然、感受清新空气的重要场所。为了进一步提升游客的游览体验&#xff0c;许多景区纷纷引入了全彩屏负氧离子监测站&#xff0c;这一创新举措不仅为景区增添了科…

【怀庄之醉白酒】怀庄之醉酱香白酒哪款好?

【怀庄之醉酱香白酒】在怀庄之醉酱香白酒的丰富系列中&#xff0c;怀庄之醉尊品、怀庄之醉三星和怀庄之醉匠心之作是三款受到广泛欢迎的产品。 每一款酒都具备其独特的风味和适合的饮用场合。以下是对这三款酒特性的分析&#xff1a; 怀庄之醉 尊品&#xff1a;怀庄之醉 尊品…

云通SIPX,您的码号资源智能调度专家!

在数字化转型的浪潮中&#xff0c;号码资源作为企业与客户沟通的重要桥梁&#xff0c;其管理效率直接关系到企业运营的成败。随着运营商对号码资源管理的规范化和精细化&#xff0c;企业对高效、智能的号码资源管理需求日益增长&#xff0c;以实现对外呼叫的降本增效。 一、什么…

学生成绩管理系统带8000字文档学生选课管理系统java项目javaweb项目ssm项目jsp项目java课程设计java毕业设计

文章目录 学生选课成绩管理系统一、项目演示二、项目介绍三、8500字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带8500字文档&#xff08;9.9&#xffe5;带走&#xff09; 学生选课成绩管理系统 一、项目演示 选课成绩管理系统 二、项目介绍 语言: Java …

php数据结构之链表

本文由 ChatMoney团队出品 链表的基本概念 链表&#xff08;Linked List&#xff09;是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点除了存储数据外&#xff0c;还包含指向下一个节点的指针。与数组相比&#xff0c;链表在插入和删除操作上具有更高…

直播带货大模型,开启自动卖货的时代

Streamer-Sales是一个为直播带货主播量身定制的智能工具。 它能够智能分析商品特性&#xff0c;自动创作出引人入胜的解说词&#xff0c;从而有效增强商品的吸引力和提升销售业绩。它还具备多种交互功能&#xff0c;比如将主播的语音实时转换为文字&#xff0c;便于与观众进行…

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章

原创作品—医疗行业软件界面UI、交互设计

在医疗行业大屏UI设计中&#xff0c;首要的是以用户为中心&#xff0c;深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等&#xff0c;确保用户能够迅速、准确地获取所需信息。同时&#xff0c;功能布局应合理…

12寸和8寸封装线的差异点

12英寸&#xff08;300mm&#xff09;晶圆封装线与8英寸&#xff08;200mm&#xff09;晶圆封装线在多个方面存在显著区别&#xff0c;这些区别影响了它们的生产效率、成本结构和适用技术。以下是一些主要差异&#xff1a; 1. **晶圆面积**&#xff1a; - 12英寸晶圆拥有更…

​​植物大战僵尸杂交版直装版v2.1 安卓版:全新策略塔防体验

《植物大战僵尸杂交版直装版》v2.1是由B站UP主“潜艇伟伟迷”精心制作的同人游戏&#xff0c;为策略塔防手游带来了全新的活力。游戏中引入了众多创新的杂交植物&#xff0c;例如结合了向日葵的阳光生成能力和豌豆射手的攻击特性的向日葵豌豆射手&#xff0c;以及拥有寒冰豌豆射…

docker打包 arm32v7/debian 问题总结

1.架构不同 我的宿主是x86 ,但是打包的是arm架构 安装qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…

金融科技如何运用技术手段实现细颗粒度服务

随着金融科技的快速发展&#xff0c;金融机构正在通过采用各种技术手段来提供更加细颗粒度的服务&#xff0c;以满足客户日益增长的个性化需求。这些技术手段不仅提高了金融服务的效率和安全性&#xff0c;还显著提升了用户体验和满意度。 一、大数据分析与人工智能&#xff08…

中国旺旺:廉颇老矣or老而弥坚?

从80后的童年吃到了20后的童年&#xff0c;什么舌尖上的产品能旺这么久&#xff1f; 相信大家都能说出他的名字——中国旺旺。 要问旺旺的第一单品是啥&#xff1f;毫无疑问是旺仔牛奶。 这也体现在财报上&#xff0c;2022财年&#xff0c;旺旺乳品、饮料品类收入双位数下滑&…

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等

【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标&#xff1a;mae、rmse等 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免…

动环监控系统数据可靠维护与效能实现

摘要&#xff1a;了解动环监控的功能,总结出通过分析监控系统的数据库和系统软件,采取措施对数据进行维护,充分利用监控系统,确保高效低耗的维护网络。 关键词&#xff1a;监控&#xff1b;数据丢失&#xff1b;备份&#xff1b;恢复&#xff1b;维护 0引言 随着网络信息化和…

如何提高外文文献阅读效率

要提高外文文献阅读效率&#xff0c;可以考虑以下几点&#xff1a; 掌握基础语言能力&#xff1a; 熟练掌握英语或其他目标语言的基础词汇和语法是提高阅读效率的基础。如果语言能力有限&#xff0c;可以通过课程、阅读和听力练习来增强。 选择合适的文献&#xff1a; 根据研…

python-docx 使用xml为docx不同的章节段落设置不同字体

本文目录 前言一、完整代码二、代码详细解析1、处理过程解释(1) 引入库并定义路径(2) 创建docx的备份文件(3) 定义命名空间(4) 打开并处理.docx文件(5) 分析和组织文档结构(6) 设置字体(7) 保存结果前言 本文主要解决的内容,就是为一个docx的不同章节段落设置不同的字体,因为…