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

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。

初见此题,第一时间想到的是暴力
代码:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {for (int i = 0; i < nums.size(); i++) {for (int j = i + 1; j < nums.size(); j++) {if (nums[i] + nums[j] == target) {return {i, j};}}}return {};}
};

注意:j从i+1开始遍历,遍历到最后i=nums.size()-1时,j超出nums.size()为空,若j也从i开始遍历,可能出现ij,例如:target = 4,nums = [1,2,3]
得到i = 1,j = 1;即nums[i]
nums[j],nums[i]+nums[j]==target

最后为什么要return{}?
此函数的返回值类型为vector,此函数必须有一个返回值,如果在循环中没找到符合条件的索引,则需要返回一个空的vector

分析:使用了嵌套循环,时间复杂度为O(n^2),
返回的vector为输出空间,只是用了i,j等几个额外变量,无额外数据结构,空间复杂度为O(1)

还能更快吗?
再看题目,找值,返回下标,把这两个结合在一起可以使用hash_map
代码:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> map;for(int i=0;i<nums.size();i++){auto t = map.find(target - nums[i]);if(t != map.end()){return {t->second,i};}map[nums[i]] = i;}return {};}
};

注意:对t定义时使用auto,自适应
map[nums[i]] = i,让值作为键,直接存入map中,后续只需判断map中是否存在target-nums[i],节省时间

分析:
时间复杂度:hash_map查找的平均时间复杂度为O(1),插入操作 map[nums[i]] = i;的平均时间复杂度为O(n),使用一个for循环,时间复杂度为O(n),
空间复杂度:额外使用了一个hash_map,空间复杂度为O(n)

http://www.jsqmd.com/news/433052/

相关文章:

  • 接口自动化测试完整版
  • window系统telnet 最佳方案
  • factory机制
  • 计算机图形学几何工具算法详解pdf下载
  • Andrew Stankevich Contest 42 (ASC 42) 总结
  • Python的函数
  • jQuery CSS 类
  • JavaScript let 和 const:深入理解与最佳实践
  • Android12 Rk3588 系统APK签名文件使用方法
  • 文章索引
  • RAG——为什么说RAG是AI 2.0时代的“杀手级”应用
  • skills 核心原理
  • 题解:P14121 [SCCPC 2021] Dont Really Like How The Story Ends
  • 广州商业街区美陈氛围升级设计公司怎么选?避坑攻略+靠谱名单
  • 二.uboot叙述
  • 题解:P5870 [SEERC 2018] Modern Djinn
  • 宠物健康有保障:2026上海服务出色的宠物医生盘点,腹腔镜绝育/猫咪乳糜胸手术/猫咪绝育/宠物医院,宠物专家口碑推荐 - 品牌推荐师
  • 代码复查方法:问题发现系统
  • Go 性能优化技巧
  • 金融行业大数据实践:数据目录在风控中的应用
  • 吃透 Nginx 核心知识点:从静态部署到反向代理与负载均衡
  • 【精准医学与基因组学:技术实现】第一章:基因组数据处理工程 pipeline 1.3 Snakemake实战:基于Python的规则定义、DAG执行图优化、HPC集群与云环境部署
  • AutoCAD 硬件加速无法开启(仅显示虚拟设备 gdi17.hdi)的解决方法
  • AI原生应用:人机协作的未来已来,你准备好了吗?
  • 11.数据类型拓展
  • 题解:P14556 [ROI 2013 Day2] 星际航程
  • 题解:UVA11350 Stern-Brocot Tree
  • 数字孪生架构设计及系统开发难点有哪些?
  • ansible常见的模块
  • java学习笔记1.16