当前位置: 首页 > wzjs >正文

莱芜网站优化招聘网亚洲精华国产精华液的护肤功效

莱芜网站优化招聘网,亚洲精华国产精华液的护肤功效,提供武汉手机网站建设,专业建设规划方案模板Swift|三数之和(3Sum)详细题解 注释 拓展(LeetCode 15) ✨题目描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a, b, c,使得 a b c 0。请你找出所有和为 0 且不重…

Swift|三数之和(3Sum)详细题解 + 注释 + 拓展(LeetCode 15)

✨题目描述

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a, b, c,使得 a + b + c = 0。请你找出所有和为 0 且不重复的三元组。

注意:答案中不能包含重复的三元组。


🧠解题思路

本题是 LeetCode 中非常经典的“双指针”+“去重”问题,属于中等难度。

✅ 步骤如下:

  1. 对数组进行排序:便于后续去重处理和双指针的使用。
  2. 固定一个数 nums[i]:枚举 i,并为其设置两个指针 left(i+1)和 right(nums.count - 1)。
  3. 使用双指针向中间靠拢,判断三数之和是否为 0。
  4. 去重操作
    • i 进行去重,跳过与前一个数相同的情况。
    • leftright 也要去重,防止重复三元组。

🧾 Swift 代码实现(含详细注释)

func threeSum(_ nums: [Int]) -> [[Int]] {let nums = nums.sorted()  // 排序是关键,便于去重和双指针var result: [[Int]] = []for i in 0..<nums.count - 2 {// 如果当前数字和前一个数字相同,跳过,避免重复三元组if i > 0 && nums[i] == nums[i - 1] {continue}var left = i + 1var right = nums.count - 1while left < right {let sum = nums[i] + nums[left] + nums[right]if sum == 0 {// 找到一个有效三元组result.append([nums[i], nums[left], nums[right]])// 去重:移动 left 指针跳过相同的数while left < right && nums[left] == nums[left + 1] {left += 1}// 去重:移动 right 指针跳过相同的数while left < right && nums[right] == nums[right - 1] {right -= 1}left += 1right -= 1} else if sum < 0 {// 总和偏小,左指针右移以增大总和left += 1} else {// 总和偏大,右指针左移以减小总和right -= 1}}}return result
}

⏱️时间复杂度分析

步骤复杂度
排序O(nlogn)
遍历 + 双指针查找O(n^2)
总体时间复杂度O(n²)
  • n 是数组的长度。
  • 最坏情况下,每个元素都要与后面的所有元素进行组合查找。

🧠空间复杂度

  • 使用了常数级别的辅助空间(除了结果数组):O(1)
  • 如果考虑返回结果的空间,那么是 O(k),其中 k 为结果中三元组的个数。

🔍输入输出示例

let nums = [-1, 0, 1, 2, -1, -4]
print(threeSum(nums)) 
// 输出: [[-1, -1, 2], [-1, 0, 1]]

🧱边界情况说明

输入输出说明
[][]空数组
[0, 0, 0][[0,0,0]]需要处理重复值
[1, 2, -2, -1][]没有满足条件的组合

🧩拓展与优化

  1. 如果要求和为 target 而非 0

    • 将判断条件 sum == 0 改为 sum == target 即可。
    • 本题可以推广为 kSum 问题(如 Two Sum、Four Sum)。
  2. 去重逻辑处理建议封装为函数

    • 提高代码可读性与复用性。
  3. Swift 中使用 Set 存储结果避免重复

    • 如果输入较多或存在重复项较多,可以考虑用 Set<[Int]> 先去重再转成 [[Int]]

🏁总结

  • 本题考察的是数组排序 + 双指针技巧。
  • 核心是合理处理重复元素,避免重复解。
  • 时间复杂度为 O(n²),在面试中属于经典问题,建议掌握。

如果你觉得有用,欢迎点赞、评论支持我继续更新 💪
你也可以在评论区分享你遇到的变体,我来帮你一起解答!

http://www.dtcms.com/wzjs/48049.html

相关文章:

  • 王烨燃大夫简介湖南网站建设推广优化
  • 一个大佬做的本子网站深圳网站建设专业乐云seo
  • 百度竞价推广价格seo超级外链工具
  • 温州网站建设推广百度安装免费下载
  • 1做网站推广关键词排名优化易下拉技巧
  • 网络推广公司怎么报税常熟seo网站优化软件
  • 聚美优品网站建设方案信息流优化师是做什么的
  • 多种手机网站建设互联网运营培训课程
  • 如何做网站图片关键词优化是怎样收费的
  • 小学网站建设方案书搜狗站长平台
  • 杭州科技公司网站建设百度官方官网
  • wordpress做的网站效果6网站设计报价方案
  • 贸易网站建设企业网站分析报告
  • 一页网站首页图如何做怎么自己创建网址
  • wordpress建站插件网络广告营销的特点
  • 手机怎么做网站精美软文句子
  • 新手20种引流推广方法seo在线优化技术
  • 优质校建设专题网站近期时政热点新闻20条
  • 制作一个网站要多少钱郑州技术支持seo
  • 做网站要不要35类商标深圳seo优化推广
  • 公司响应式网站建设平台网站优化排名方法
  • 南阳专业网站制作费用一般网络推广应该怎么做
  • 南宁市企业网站建设深圳靠谱网站建设公司
  • 岳池住房和城乡建设厅网站国家卫健委最新疫情报告
  • html5商城网站广州seo服务公司
  • 狮岭做包包的网站最近三天的新闻大事简短
  • 网站建设需要用软件中国十大seo公司
  • 做采集网站的方法软件定制开发
  • 济南高端网站建设公司中关村在线app
  • 动态网站开发登录页面代码网站推广引流