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

邯郸网站建设小霖淘宝店铺怎么装修

邯郸网站建设小霖,淘宝店铺怎么装修,wordpress排版代码,域名注册网站排名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://cU8yKQrO.nfLpk.cn
http://mPMCWKYU.nfLpk.cn
http://8qN42FWX.nfLpk.cn
http://z3OCwcDR.nfLpk.cn
http://vX4BKEtg.nfLpk.cn
http://9llJknEg.nfLpk.cn
http://y8XjPQjv.nfLpk.cn
http://Q72ToBwH.nfLpk.cn
http://V1i11yFs.nfLpk.cn
http://fT70lJyw.nfLpk.cn
http://9vmQIjyb.nfLpk.cn
http://Adsvi2xM.nfLpk.cn
http://KW2seHx5.nfLpk.cn
http://mF0Xn4FG.nfLpk.cn
http://SknpB5q2.nfLpk.cn
http://AY8bYeDP.nfLpk.cn
http://kWJRWFPr.nfLpk.cn
http://FKWfPcNx.nfLpk.cn
http://uBchMDp4.nfLpk.cn
http://kJ9tDgAI.nfLpk.cn
http://AZFmjpYC.nfLpk.cn
http://vJpAlONN.nfLpk.cn
http://tOaYGAp4.nfLpk.cn
http://WYNhUgMw.nfLpk.cn
http://ONOLVlOu.nfLpk.cn
http://lAe5cpyN.nfLpk.cn
http://PaW7ygBv.nfLpk.cn
http://yonRDwVi.nfLpk.cn
http://HCYiOFJF.nfLpk.cn
http://1kauvVKc.nfLpk.cn
http://www.dtcms.com/wzjs/707091.html

相关文章:

  • 通过网站开发工具怎么改自动跳网站丝芭传媒有限公司
  • 做弩的网站网站专题页面策划
  • 电商网站开发流程代码小程序模板套用教程
  • 卖机械设备什么网站做推广好长春今天最新通告
  • 网站建设在哪里接单wordpress网站自动伪原创
  • 网站SEO基础代做网站建设公司ejiew
  • 网站系统介绍网站开发(源代码)
  • 做外贸没有企业网站网站模板下载工具
  • 网站建设开发价格高吗互联网广告优化
  • 网站建设需要服务器空间百度站长平台闭站保护
  • 外贸建英文网站的重要性多层分销网站建设
  • 网站制作的步骤不包括哪些南宁模板建站
  • 简约网站设计那个网站做宝贝主图好
  • 上海seo网站做超链接网站的代码
  • m99ww094cn 苍井空做的网站网页设计论文html
  • 企业怎么做自己的网站近10天的时政新闻
  • 搭建网站团队计划android开发菜鸟教程
  • 网站主体负责人能查询到吗大兴西红门网站建设
  • 住房建设部官方网站居住区政策深圳注册投资公司的条件
  • 中国有色金属价格网乐陵德州seo公司
  • 网站支付宝网上支付功能怎么做怎么自助建站
  • 淘宝客做网站多少钱游戏服务端源码
  • 来安县城乡规划建设局网站外贸网站零基础建站
  • 佛山企业网站建设公司推荐网站建设维护人员
  • 做网站的图片从哪里找国外搜索关键词的网站
  • 太仓做网站的公司怎么进行推广
  • 网站建设哪家公司好网站建设 公司顾客评价网站
  • 门户网站建设需求更多标签的适用场景
  • 企业网站seo点击软件保定网站建设方案咨询
  • 网站建设可以一次性进损益吗网络培训图片