```html
南邮编程在线编程题一
南邮编程在线编程题一解答:
题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] nums[1] == 9 ,返回 [0, 1] 。
解答思路:
该题可以使用哈希表来解决,遍历数组,将每个元素的值和对应的索引存储在哈希表中。然后遍历数组,对于每个元素 nums[i],查找 target nums[i] 是否在哈希表中,并且不能是 nums[i] 本身。如果找到了符合条件的元素,则返回它们的索引。
解答代码:
def two_sum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target num
if complement in hashmap and hashmap[complement] != i:
return [hashmap[complement], i]
hashmap[num] = i
return []
代码解释:
在代码中,我们首先创建一个空的哈希表 `hashmap`。然后开始遍历数组 `nums`,每次迭代时,将当前元素的值和索引存储在哈希表中。接着,对于每个元素,我们计算目标值与当前元素的差值 `complement`,并检查这个差值是否在哈希表中。如果在,且该差值的索引不等于当前元素的索引,则说明找到了符合条件的两个数,返回它们的索引。如果遍历完整个数组都没有找到符合条件的数,则返回一个空数组。
该算法的时间复杂度为 O(n),其中 n 是数组中的元素数量。因为只需要遍历数组两次,并且哈希表的插入和查找操作的时间复杂度均为 O(1)。
建议:
这种类型的题目属于算法和数据结构中的基础题,是面试中常见的题目之一。通过学习和解决这类题目,可以加深对基本算法思想的理解,提高编程能力。建议多练习类似的编程题目,并深入理解各种解题思路的原理和逻辑,这对于编程能力的提升是非常有益的。