📅  最后修改于: 2023-12-03 14:58:36.500000             🧑  作者: Mango
这是一道编程题,需要编写一个程序来解决问题。具体要求如下:
在整数数组中,找到两个数的和等于给定的目标值,返回这两个数的下标。 假设每个输入只有一个答案,而且不可以使用同一个元素两次。
第一行输入一个整数 $n$,表示数组的长度。 第二行输入 $n$ 个整数 $nums_i$,表示数组中的元素。 第三行输入一个整数 $target$,表示目标值。
如果存在两个数的和等于目标值,则输出这两个数的下标,即两个数在数组中的位置。
如果不存在这样的两个数,则输出 null
。
输入
6
2 7 11 15 3 6
9
输出
[0,1]
静态数组可以采用两个指针来解决此题,时间复杂度为 $O(n)$。 动态数组可以采用哈希表来解决此题,时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。
将此题分为两种情况讨论:
静态数组需要用两个指针来解决问题,左指针指向数组的最左端,右指针指向数组的最右端。依次比较左右指针的数之和与目标值的大小,若小于目标值则左指针向右移动一位,若大于目标值则右指针向左移动一位,若等于目标值则输出两个指针的下标。
动态数组可以采用哈希表来解决问题,用循环遍历数组中的每个元素,并在哈希表中查找目标值与当前元素之差是否存在,若存在则输出两个下标,否则将当前元素存入哈希表中。
以下为静态数组的代码片段,使用 python 语言编写:
def twoSum(nums: List[int], target: int) -> List[int]:
hashmap = {}
for i, num in enumerate(nums):
if hashmap.get(target - num) is not None:
return [hashmap.get(target - num), i]
hashmap[num] = i
return None
以下为动态数组的代码片段,使用 python 语言编写:
def two_sum(nums, target):
hash_map = {}
for i, num in enumerate(nums):
if target - num in hash_map:
return [hash_map[target - num], i]
hash_map[num] = i
return None