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

哈希:两数之和

问题描述:在一个整数数组中,找到两数之和为target的两个值,返回找到的两个值的下标。

nums=[3,3]

target=6

返回:[0,1]

说明:返回结果,索引无顺序要求;有唯一的答案;不能使用两次相同的元素,比如上述例子中不能返回[0,0]或者[1,1]。


求解思路1:暴力解法

两层for循环

时间复杂度:O(n^2)

空间复杂度:O(1)

class Solution {public int[] twoSum(int[] nums, int target) {int[] indexArr = new int[2];for(int i = 0;i < nums.length;i++){for(int j = i + 1;j < nums.length;j++){if(nums[i] + nums[j] == target){indexArr[0] = i;indexArr[1] = j;break;}}}return indexArr;}
}

求解思路2:使用哈希

把所有值都存到哈希表中,key为num,value为index。找两数,其实就是遍历的时候查找target-nums[i],去哈希表中查找即可。

时间复杂度:O(1)

空间复杂度:O(n)

class Solution {public int[] twoSum(int[] nums, int target) {int[] indexArr = new int[2];HashMap<Integer,Integer> hashMap = new HashMap<>();// 把所有的数都存放到hashMap中for(int i = 0;i < nums.length;i++){hashMap.put(nums[i],i);}for(int i = 0;i < nums.length;i++){int curNum = nums[i];int another = target - curNum;// 寻找另一个数时,必须要有i != hashMap.get(another)// 否则[3,2,4]这种情况会返回[0,0]而报错if(hashMap.containsKey(another) && i != hashMap.get(another)){indexArr[0] = i;indexArr[1] = hashMap.get(another);break;}}return indexArr;}
}

上面的代码是构建hash表、遍历查找另一个数,分开了两步,也可以在一个for循环里进行,如下:

class Solution {public int[] twoSum(int[] nums, int target) {int[] indexArr = new int[2];HashMap<Integer,Integer> hashMap = new HashMap<>();hashMap.put(nums[0],0);for(int i = 0;i < nums.length;i++){int curNum = nums[i];int another = target - curNum;if(hashMap.containsKey(another) && i != hashMap.get(another)){indexArr[0] = i;indexArr[1] = hashMap.get(another);break;}hashMap.put(nums[i],i);}return indexArr;}
}

练习地址:1. 两数之和 - 力扣(LeetCode)

http://www.xdnf.cn/news/1328653.html

相关文章:

  • 从零开始的云计算生活——第四十六天,铁杵成针,kubernetes模块之Configmap资源与Secret资源对象
  • 【技术揭秘】AI Agent操作系统架构演进:从单体到分布式智能的跃迁
  • 告别手写文档!Spring Boot API 文档终极解决方案:SpringDoc OpenAPI
  • 大数据数据库 —— 初见loTDB
  • 视觉采集模块的用法
  • A股大盘数据-20250819 分析
  • 云原生俱乐部-shell知识点归纳(1)
  • 力扣57:插入区间
  • 决策树剪枝及数据处理
  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 【Git 子模块与动态路由映射技术分析文档】
  • Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PCL+Spigot服务器+python进行MC编程(使用Trae进行AI编程)---可以生成彩虹
  • Hugging Face 核心组件介绍
  • 35岁对工作的一些感悟
  • Ansible 中的文件包含与导入机制
  • noetic版本/ubuntu20 通过moveit控制真实机械臂
  • 常见的对比学习的损失函数
  • DataAnalytics之Tool:Metabase的简介、安装和使用方法、案例应用之详细攻略
  • 数字ic后端设计从入门到精通14(含fusion compiler, tcl教学)半定制后端设计
  • plantsimulation知识点25.8.19 工件不在RGV中心怎么办?
  • c#联合halcon的基础教程(案例:亮度计算、角度计算和缺陷检测)(含halcon代码)
  • 力扣面试150(60/150)
  • 机器学习之决策树:从原理到实战(附泰坦尼克号预测任务)
  • Mac(七)右键新建文件的救世主 iRightMouse
  • 大数据MapReduce架构:分布式计算的经典范式
  • 20250819 强连通分量,边双总结
  • 从线性回归到神经网络到自注意力机制 —— 激活函数与参数的演进
  • 人工智能统一信息结构的挑战与前景