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

企业 网站 推广可以做微网站的第三方平台

企业 网站 推广,可以做微网站的第三方平台,wordpress关闭首页门面,汉阳网站建设公司LeetCode经典题解:两数之和(Two Sum) 一、题目描述 题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只…

LeetCode经典题解:两数之和(Two Sum)

一、题目描述

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

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

二、最优解法:哈希表一次遍历

代码实现

class Solution {public int[] twoSum(int[] nums, int target) {// 哈希表:存储已遍历的数字和对应的下标(key=数字,value=下标)Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {// 计算当前数字需要的"搭档"(补数)int complement = target - nums[i];// 检查哈希表中是否存在这个搭档if (map.containsKey(complement)) {// 存在则返回两个下标(搭档的下标在前,当前下标在后)return new int[]{map.get(complement), i};}// 不存在则将当前数字和下标存入哈希表,供后续数字查询map.put(nums[i], i);}// 题目保证有解,此处仅为语法兼容return new int[]{};}
}

解法解析

  1. 核心思路:用哈希表记录已遍历的数字及下标,遍历过程中同步检查“当前数字的补数(target - 当前数字)”是否已存在于哈希表中,存在则直接返回结果。
  2. 时间复杂度O(n)(仅遍历一次数组,哈希表查询为 O(1))。
  3. 空间复杂度O(n)(哈希表最多存储 n-1 个元素)。

三、为什么这样解?—— 从暴力到优化的思考

1. 暴力解法的问题

最直观的思路是“双重循环”:对每个数字,遍历数组找另一个能凑成 target 的数字。但这种方法时间复杂度为 O(n²),当数组长度超过 10^4 时会超时。

2. 哈希表的优化逻辑

哈希表的“键值对”特性可以将“查询补数”的操作从 O(n) 降到 O(1)。通过一次遍历,既记录已访问的数字,又实时检查补数,实现“空间换时间”的优化。

3. 关键细节:避免重复使用同一元素

代码中“先检查补数,再存入当前数字”的顺序,能确保不会用同一个元素两次。例如:

  • 输入 nums = [3,3]target = 6
    遍历第一个 3 时,哈希表为空,存入 (3,0)
    遍历第二个 3 时,补数 3 已在哈希表中,返回 [0,1],避免错误使用同一元素。

四、高效记忆技巧:把代码变成“故事”

记算法不背代码,而是记“逻辑流程”。用“场景化+角色化”的方式,让每个步骤都有意义:

1. 角色赋值:给代码元素“拟人化”

  • 哈希表(map):扮演“线索本”,记录“数字(嫌疑人特征)”和“下标(出现位置)”。
  • 循环遍历:扮演“侦探”,逐个排查数组中的数字。
  • 补数(target - nums[i]:扮演“案件目标”,即侦探要找的“另一个嫌疑人”。

2. 故事线:侦探破案的过程

侦探带着“线索本”查案,遇到每个嫌疑人(nums[i]):
① 先查线索本里有没有能和他凑成“案件目标(target)”的搭档(补数);
② 有则直接抓出两人(返回下标);
③ 没有则把当前嫌疑人的特征和位置记到线索本,继续排查。

3. 对比记忆:暴力法 vs 哈希表法

方法操作逻辑效率比喻核心区别
暴力法逐个试错(双重循环)大海捞针无记录,全靠硬试
哈希表法记录+查询(一次循环)按图索骥用线索本(哈希表)加速

4. 一句话总结

“遍历数组时,用哈希表记数字下标,查补数是否存在,有则返回,无则记录,一次遍历搞定。”

五、实战拓展:从基础到变种

掌握基础解法后,尝试这些变种题巩固思路:

  1. 两数之和 II(有序数组):可用“双指针”优化空间,但哈希表法仍适用;
  2. 两数之和 IV(二叉搜索树):遍历树时用哈希表记录节点值,逻辑与数组版一致;
  3. 三数之和:固定一个数后,转化为“两数之和”问题(需去重)。

通过场景化记忆和逻辑拆解,“两数之和”的解法会变成你的“条件反射”。记住:算法的本质是“解决问题的思路”,而不是代码本身。多思考“为什么这样解”,比死记代码更重要。

http://www.dtcms.com/wzjs/832937.html

相关文章:

  • php网站开发if的代码国际新闻最新消息中国
  • 滨州网站建设网站搭建响应式
  • 网站优化用户体验口碑营销论文
  • 网站建设与维护中国出版社html5网站开发工具
  • 天行健公司网站建设外贸网站首页
  • 电子商务网站建设的一般步骤网站商城制作费用
  • 焦作网站建设焦作泰安网站建设入门推荐
  • 免费网站后台管理系统免费的个人网页
  • 云南省做网站开发的公司排名济南做网站设计
  • 网站备案需要多久时间小程序商城开发商
  • 做任务有奖励的网站建设企业官方网站企业登录
  • 网站设计包括什么北京网站被处罚
  • 网站建设与管理专业自我评价开发者头条
  • 电子商务网站开发参考文献门户建设是什么意思
  • 登陆网站怎么做wordpress自带图片大小
  • 建设西安网站高端网站建设 n磐石网络
  • 福州网站开发cms织梦中查看演示网站怎么做
  • 潍坊建设网站杭州十大设计公司
  • 网站备案认领网站 运营 外包 每个月多少钱
  • 淘宝客 网站无备案长沙企业网站
  • 网站内容设计是什么网站建设销售要懂什么
  • 百度做的网站后台怎么更新郴州网上报名小学系统登录
  • 网站建设项目报告总结上海人才服务网官网
  • 山西网站建设适合v加xtdseo做视频网站需要哪些技术指标
  • 毕设做网站具体步骤杭州专业网站优化公司
  • 外贸网站平台有哪些森动网网站建设好吗
  • 现在做网站用什么工具好牌子网
  • p2p网站建设小微金融沈阳网络科技公司排名
  • 自学做网站可以赚钱吗如何破解网站后台管理
  • 做网站域名 空间和wordpress一样的