尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
7.LeetCode算法习题讲解--双指针--四数之和
一.题目习题链接18. 四数之和 - 力扣LeetCode二.题目分析给定数组nums和目标值target寻找所有不重复的四元组[nums[a], nums[b], nums[c], nums[d]]满足下标约束0 ≤ a,b,c,d n四个下标互不相等数值条件nums[a]nums[b]nums[c]nums[d] target结果要求不能包含重复四元组返回顺序随意⚠️ 重点区分下标不同但元素组合一样 → 视为重复需要去重。 例[2,2,2,2]只能输出一组答案。这里的题目分析与前面三数之和的讲解一样三.算法原理讲解解法一暴力枚举 去重这里我就不过多介绍了可以看上一节的三数之和解法二双指针 去重思路与三数之和的思路完全相同三数之和是固定一个数利用双指针进行查找这里也是类似固定两个数利用双指针进行查找这里需要注意的是要进行三次去重四.编写代码这里有一个注意的点红色框里面会出现数据溢出的风险所以这里需要转化为long long注这里的数组长度要储存下来nums.size()返回的类型是size_t它是无符号整数unsigned无符号数永远 ≥ 0不能存负数。一旦做减法结果小于 0不会得到‑1而是发生「无符号下溢」自动变成一个非常大的正数。class Solution { public: vectorvectorint fourSum(vectorint nums, int target) { vectorvectorint ret; sort(nums.begin(), nums.end()); int n nums.size(); for(int i 0; i n - 3;) // 固定数a { int a i; for(int j i 1; j n - 2;) // 固定数b { int b j, left j 1, right n - 1; while(left right) { // 注意数据溢出 long long num (long long)nums[a] nums[b] nums[left] nums[right]; if(num target) { right--; } else if(num target) { left; } else { ret.push_back({nums[a], nums[b], nums[left], nums[right]}); left; right--; // 去重一 while(left right nums[left] nums[left - 1]) left; while(left right nums[right] nums[right 1]) right--; } } // 去重二 j; while(j n - 2 nums[j] nums[j - 1]) j; } // 去重三 i; while(i n - 3 nums[i] nums[i - 1]) i; } return ret; } };两段代码结果不一样的根源vectorint ret(1,2); // size() 1 cout (0 ret.size() - 3) endl; //①输出1true int n ret.size() - 3; //②n -2ret.size()返回size_t64 位无符号 unsigned第①处0 ret.size()-3ret.size()→size_t(1)无符号1‑3全部操作数都是无符号触发无符号下溢1 -3 -2但是无符号不能存负数按照模 \(2^{64}\) 换算得到巨大无符号数18446744073709551614比较0 这个超大无符号数→ 条件成立输出1(true)整个表达式全部按size_t无符号运算没有转换成 int。第②处int n ret.size() - 3;同样先算ret.size()-3得到那个巨大的size_t大数把这个巨大无符号数赋值给 int 类型变量 n大数截断转换成有符号 int结果变成‑2⚠️关键点下溢发生在无符号运算那一步赋值给 int 只是把巨大数强制截断转回负数不是减法得到‑2
RELATED

相关推荐

2026世界机器人大会日程解析:技术趋势洞察与高效参会指南

2026世界机器人大会日程解析:技术趋势洞察与高效参会指南

这次我们来看一个关于2026世界机器人大会同期活动日程表发布的消息。如果你关注机器人领域的技术趋势、行业应用和前沿交流,这个日程表就是一份关键的行动指南。它不仅仅是会议时间地点的罗列,更揭示了未来几年机器人技术发展的重点赛道、产学研结合的热…

📅 2026/10/30 9:52:01
MoveIt编程实战:从API调用到复杂运动规划与避坑指南

MoveIt编程实战:从API调用到复杂运动规划与避坑指南

1. 项目概述:从零到一,让机械臂“动”起来如果你正在学习ROS机器人开发,尤其是想让一个机械臂模型在仿真环境里完成抓取、避障这些看起来“很酷”的动作,那么MoveIt这个名字你一定不陌生。它几乎是ROS生态中机械臂运动规划的代名词…

📅 2026/10/30 9:29:47
数学建模知识体系构建:从零散笔记到高效“外挂大脑”的实践指南

数学建模知识体系构建:从零散笔记到高效“外挂大脑”的实践指南

1. 项目概述:从“记笔记”到“建体系” “数学建模笔记总结”,这个标题听起来平平无奇,甚至有点学生作业的味道。但作为一个在数模圈里摸爬滚打了十几年,从国赛、美赛(MCM/ICM)一路打到企业级应用的老兵&am…

📅 2026/10/30 13:38:24
MORE NEWS

更多资讯

📰

如何系统学习大模型算法?llm-algo-leetcode 从入门到生产的三段式路线

教程大模型人工智能深度学习微调模型优化模型量化分布式训练 【免费下载链接】llm-algo-leetcode LLM algorithm practice lab with theory, solutions, and test cases.《大模型算法与系统教程》面向大模型入门到进阶的算法实战教程,覆盖原理讲解、答案解析、测试用…

📰

【保姆级打包】全套元件库+封装库:Altium Designer一步导入

【保姆级打包】全套元件库封装库:Altium Designer一步导入 【免费下载链接】AltiumDesigner超全元件库封装库部分3D 本仓库提供了一个非常全面的Altium Designer元件库和封装库资源,其中部分元件还包含了3D模型。资源文件经过精心整理,解压后…

📰

【免费开源】堕落玩偶0.49版:自由捏娃+多结局的科幻恋爱沙盒

【免费开源】堕落玩偶0.49版:自由捏娃多结局的科幻恋爱沙盒 【免费下载链接】堕落玩偶0.49版无视setam后宫资源文件介绍 本资源文件为“堕落玩偶0.49版[无视setam后宫]”,是一款游戏程序的特定版本。该版本允许玩家在科幻未来时代中自由建造和设计玩偶&a…

📰

如何使用parakeet-tdt-0.6b-v3:新手必读的parakeet-mlx快速上手教程

【免费下载链接】parakeet-tdt-0.6b-v3 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/parakeet-tdt-0.6b-v3 点击查看 免费下载 parakeet-tdt-0.6b-v3 是 NVIDIA Parakeet TDT 0.6B v3 语音识别模型(FastConformer RNNT 架构&#xff0…

📰

【永久免费】微信小程序视频下载快速指南

【永久免费】微信小程序视频下载快速指南 【免费下载链接】微信小程序视频下载神器 微信小程序视频下载神器是一款功能强大的工具,专为解析和提取微信小程序中的视频链接而设计。它不仅支持多种视频格式的保存,还具备批量提取和快速下载功能,…

📰

水下OFDM多径信道建模与误码率优化实战

简介:这份资源聚焦水下通信中的OFDM技术,面向通信工程、水声通信方向的学生与研究人员,用于理解并仿真多径水下信道下的OFDM收发链路。包内共18个文件,以11个m脚本为核心,配合3个gif与2个jpg演示图、2个fig界面文件&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬