每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进

【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进

本文通过“Two Sum”问题,带你了解如何从最直观的暴力解法,逐步优化到高效的哈希表解法,并对两者进行对比,适合算法入门和面试准备。


💡 问题描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。
不能使用同一个元素两次。


🪓 解法一:暴力枚举(Brute Force)

🧠 思路:

  • 使用两层循环,枚举所有可能的两两组合。
  • 判断它们的和是否等于 target
  • 一旦找到即返回。

💻 代码实现:

func twoSumBruteForce(_ nums: [Int], _ target: Int) -> [Int] {for i in 0..<nums.count {for j in i + 1..<nums.count {if nums[i] + nums[j] == target {return [i, j]}}}return []
}

⏱ 时间复杂度:

  • O(n²):两层循环遍历所有组合。

☁️ 空间复杂度:

  • O(1):只用了常量空间。

✅ 示例:

let nums = [2, 7, 11, 15]
let target = 9
print(twoSumBruteForce(nums, target)) // 输出: [0, 1]

⚡ 解法二:哈希表(最优解法)

🧠 思路:

  • 用一个字典记录“元素值 ➜ 索引”。
  • 遍历数组时,计算目标值与当前元素的差值 complement = target - num
  • 判断这个差值是否已经出现在字典中,如果是,说明找到了。

💻 代码实现:

func twoSum(_ nums: [Int], _ target: Int) -> [Int] {var numToIndex = [Int: Int]()for (index, num) in nums.enumerated() {let complement = target - numif let complementIndex = numToIndex[complement] {return [complementIndex, index]}numToIndex[num] = index}return []
}

⏱ 时间复杂度:

  • O(n):只遍历一遍数组,每次查找/插入都是常数时间。

☁️ 空间复杂度:

  • O(n):用了一个哈希表来存储元素。

✅ 示例:

let nums = [2, 7, 11, 15]
let target = 9
print(twoSum(nums, target)) // 输出: [0, 1]

📊 总结对比

解法时间复杂度空间复杂度特点
暴力解法O(n²)O(1)简单易懂,适合初学者
哈希表解法O(n)O(n)性能更高,适合大数据、面试场景

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

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

相关文章

【保姆级】Nginx简介以及安装

Nginx简介 ​ Nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;Рамблер&#xff09;开发的&#xff0c;第一个公开版本0.1.0发布于20…

C++(25): 标准库 <deque>

目录 1、 核心概念 2. 基本语法 3. 特点 4. 特有成员函数 5. 内存与性能 6. 示例代码 7. 成员函数列表 8. 使用场景 9. 注意事项 1、 核心概念 双端队列(Double-Ended Queue,deque) 是一种允许在队列头部和尾部高效插入和删除元素的线性数据结构,同时支持随机访问。…

软件设计师关系代数和元组演算(关联、笛卡尔积、除、映射、分段等问题)考点分析——求三连

一、考点分值占比与趋势分析 综合知识历年统计表 年份考题数量分值分值占比考察重点2018334%自然连接、投影、选择2019222.67%笛卡尔积、条件筛选2020111.33%属性列计算2021334%关系运算综合应用2022222.67%元组演算表达式2023222.67%差运算、连接类型2024111.33%除法运算应用…

卸载云枢(MacOS 版)

删除 APP 和相关文件 sudo chflags -R noschg /Applications/Yunshu.app 2>/dev/null sudo rm -rf /Applications/Yunshu.app sudo rm -rf /Library/Application\ Support/EagleCloud sudo rm -rf /Library/LaunchAgents/com.eagleyun.endpoint.agent.plist sudo rm -rf /L…

在 Ubuntu 20.04 中使用 init.d 或者systemd实现开机自动执行脚本

Ubuntu 20 默认使用的是 systemd 系统管理器&#xff0c;但传统的 SysV Init&#xff08;/etc/init.d/&#xff09;脚本依然兼容并可用。本文将介绍如何通过 init.d 写脚本来在开机时自动设置某个 GPIO&#xff08;如 GPIO407&#xff09;为高电平&#xff0c;适用于嵌入式系统…

苹果的人工智能领域慢热

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

FastAPI使用@app.get/@app.post等装饰器注册路由无效404 Not Found

&#xff08;一&#xff09;问题描述 使用app.get注册路由&#xff0c;前端发送请求访问路径和路由一致&#xff0c;但一直显示404 Not Found&#xff0c;检查了好几遍&#xff0c;确认没有访问路径不一致的问题。 在Swagger文档里查看&#xff0c;也没有找到这个新添加的接口。…

制作我的计算器

1. 界面布局 新建项目 MyCalculator&#xff0c;开始布局。 2. 静态布局 代码如下&#xff1a; // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 运算区*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…

2025-5-17Vue3快速上手

1、ref对比reactive 区别第2点&#xff1a;本质是指针指向问题 整体修改reactive的数据时&#xff0c;有坑 使用原则需要根据项目原本的代码灵活参考 如果要更新的数据是从服务器获取回来的&#xff0c;用Object.assign是好方法&#xff0c;需要注意的是&#xff1a;Object.a…

深度学习---模型预热(Model Warm-Up)

一、基本概念与核心定义 模型预热是指在机器学习模型正式训练或推理前&#xff0c;通过特定技术手段使模型参数、计算图或运行环境提前进入稳定状态的过程。其本质是通过预处理操作降低初始阶段的不稳定性&#xff0c;从而提升后续任务的效率、精度或性能。 核心目标&#xf…

加载渲染geojson数据

本节我们学习如何在cesium中加载geojson数据 想要加载geojson数据首先要有数据源,我们以中国地图为例 复制数据的geo api 在cesium的官网库中查询 可以看到如何在cesium中导入数据的方法 //加载geojson数据let dataGeo Cesium.GeoJsonDataSource.load("https://geo.dat…

python:pymysql概念、基本操作和注入问题讲解

python&#xff1a;pymysql分享目录 一、概念二、数据准备三、安装pymysql四、pymysql使用&#xff08;一&#xff09;使用步骤&#xff08;二&#xff09;查询操作&#xff08;三&#xff09;增&#xff08;四&#xff09;改&#xff08;五&#xff09;删 五、关于pymysql注入…

职坐标AIoT技能培训课程实战解析

职坐标AIoT技能培训课程以人工智能与物联网技术深度融合为核心&#xff0c;构建了“理论实战行业应用”三位一体的教学体系。课程体系覆盖Python编程基础、传感器数据采集、边缘计算开发、云端服务部署及智能硬件开发全链路&#xff0c;通过分层递进的知识模块帮助学员建立系统…

MySQL 用户权限管理:从入门到精通

在当今数据驱动的时代&#xff0c;数据库安全已成为企业信息安全体系的核心组成部分。作为最流行的开源关系型数据库之一&#xff0c;MySQL 的用户权限管理系统提供了强大而灵活的访问控制机制。本文将全面解析 MySQL 用户权限管理的各个方面&#xff0c;帮助数据库管理员和开发…

Java常见API文档(下)

格式化的时间形式的常用模式对应关系如下&#xff1a; 空参构造创造simdateformate对象&#xff0c;默认格式 练习.按照指定格式展示 package kl002;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Date3 {publi…

博图1200硬件组态与启保停程序编写步骤详解

一、前言 在工业自动化控制领域&#xff0c;西门子S7-1200 PLC因其性能稳定、编程灵活而广受欢迎。本文将详细介绍使用TIA Portal&#xff08;博图&#xff09;软件进行S7-1200 PLC硬件组态以及编写基本启保停程序的完整步骤&#xff0c;帮助初学者快速掌握这一基础而重要的技…

AutoMouser - 单次AI调用铸就高效自动化脚本

你是否厌倦了反复点点点的枯燥操作&#xff1f;是否希望像科幻电影那样&#xff0c;一句指令&#xff0c;万事搞定&#xff1f;如果告诉你&#xff0c;现在只需要一次AI调用&#xff0c;就能自动执行一整套鼠标脚本操作&#xff0c;你会不会觉得&#xff1a;自动化的时代&#…

双周报Vol.72:字段级文档注释支持、视图类型现为值类型,减少内存分配

双周报Vol.72&#xff1a;字段级文档注释支持、视图类型现为值类型&#xff0c;减少内存分配 更新目录 ..调用链末尾自动丢弃值语义变更字段级文档注释支持视图类型现为值类型&#xff0c;减少内存分配特效函数调用现支持样式高亮实验性支持虚拟包&#xff0c;接口与实现解耦 …

OceanBase 开发者大会:详解 Data × AI 战略,数据库一体化架构再升级

OceanBase 2025 开发者大会与5月17日在广州举行。这是继 4 月底 OceanBase CEO 杨冰宣布公司全面进入AI 时代后的首场技术盛会。会上&#xff0c;OceanBase CTO 杨传辉系统性地阐述了公司的 DataAI 战略&#xff0c;并发布了三大产品&#xff1a;PowerRAG、共享存储&#xff0c…

大小端模式和消息的加密解密

大小端模式 知识点一 什么是大小端模式 // 大端模式 // 是指数据的高字节保存在内存的低地址中 // 而数据的低字节保存在内存的高地址中 // 这样的存储模式有点儿类似于把数据当作字符串顺序处理 // 地址由小向大增加,数据从高位往低位放 …