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

力扣Hot100---1.两数之和

写在前面

为了记录自己的这个刷题过程,于是开一个这样的合集,题单是著名的leetcode Hot 100 差不多每天一题吧(也许,可能,大概,应该,不会放鸽子吧)

力扣Hot100---1.两数之和

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

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

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104

  • -109 <= nums[i] <= 109

  • -109 <= target <= 109

只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n^2) 的算法吗

解题思路

通过观察题目,可以比较简单的想出暴力的思路,只需逐个遍历数组查找sum值等于target的值就可以了

C++代码如下

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {if (nums[i] + nums[j] == target) {return {i, j};}}}return {-1};//没啥用的,返回啥都行,因为题目保证了会有解.}
};

暴力解法可以得出时间复杂度为O(n^2)

有没有更好的办法呢?

观察可以得到,两数之和问题本质上是在查找当前数字A与target的差值是否存在于数组之中,并返回下标,那我们可以利用查找效率为O(1)的HashMap来解决问题

主要思路是:

遍历数组nums,将每一项与target的差值作为key使用HashMap查找,如果成功找到,那就返回当前数组的下标和当前key对应的value,如果失败,就把<num[i],i>存入map

代码如下

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> myMap;for (int i=0;i<nums.size();i++){int result=target-nums[i];auto it = myMap.find(result);if(it!=myMap.end()){return{it->second,i};}else{myMap.insert({nums[i],i}); //请注意此处插入的key和value分别是当前下标的内容和下标}}return{-1,-1};}
};

由于我们这次只是用了一层循环,而哈希表的查找复杂度为O(1),因此总体时间复杂度为O(n)

这里也可以看到我们这个解法是最快的

image

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

相关文章:

  • ABC 445 E(利用线性预处理最小质因子快速得到每个数的质因子分布 trick)
  • Git Pre-commit 钩子
  • Java全栈开发面试实战:从基础到高阶的深度探讨
  • 免费在线浏览查看3DTiles,支持修改坐标,微调整保存坐标json,支持cesium地图,高德地图,ArcGIS,天地图等自定义地图
  • Le sens de vivre dans un monde misrable
  • Reversing-x64Elf-100
  • 玩转opencraw
  • 6500亿美元AI资本开支:科技巨头逆势布局的底层逻辑与行业博弈
  • 深度解析:AI原生应用中的人机协作架构设计
  • 湖北2026省选试机题目 - 填充
  • 容器发展史
  • Godot游戏练习01-第4节-多人控制与玩家位置同步(翻车)
  • OpenClaw 钉钉插件安装指南 - 指南
  • Meta计划开发自定义芯片训练AI模型
  • Thread线程状态
  • 苹果音乐推出AI歌曲和视觉内容可选标识标签
  • Vibe Coding的致命隐患:你必须知道的技术债务和扩展性危机
  • 中草药检测数据集(10000 张图片已划分、已标注)| AI训练适用于目标检测任务
  • 浊流
  • ElasticSearch 常见高频面试题
  • 听歌会员的告别!R3PLAY 极简播放器 + cpolar,外网也能听遍全网歌
  • happiness and sadness
  • 炸裂新招!响应式提示系统设计模式革新提示工程架构师工作流程
  • easyRE1
  • 周赛 Round 51
  • 2024最新:AI原生应用中知识抽取的10大最佳实践
  • 具身智能构建统一跨模态表示空间的优秀的方法
  • 完整教程:【Mybatis】动态SQL与留言板小项目
  • ClickHouse与ArangoDB对比:多模型数据库选择
  • 蓝桥15/B/5/拔河