第一题: 两数之和
难度简单
 
题目描述
给定一个整数数组 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]
 
题目解答
要解决这个问题,可以使用哈希表(HashMap)来优化查找过程,使得时间复杂度可以降到 O(n)。
解题思路
1. 哈希表存储法: 使用一个哈希表 map 来存储每个元素的索引和值。遍历数组时,对于当前元素 nums[i],计算目标值 target 与当前元素的差值 diff = target - nums[i]。
2. 查找操作: 检查哈希表中是否存在 diff 这个键:
• 如果存在,则表示找到了两个数的和为 target,并返回它们的下标 [map.get(diff), i]。
• 如果不存在,则将当前元素 nums[i] 作为键,其索引 i 作为值存入哈希表中。
3. 遍历完成: 如果遍历完成都没有找到符合条件的两个数,则返回空数组或者抛出异常,这取决于题目的要求。
这种方法只需要进行一次遍历,并且在平均情况下哈希表的插入和查找操作是 O(1) 的,因此总体时间复杂度为 O(n)。
JavaScript 实现:
 
 
 
 
 
 
2024-07-08
浏览174
力扣算法题
登录后评论
评论
分享