📜  门|门 IT 2008 |第 72 题(1)

📅  最后修改于: 2023-12-03 14:58:36.500000             🧑  作者: Mango

门|门 IT 2008 |第 72 题

题目描述

这是一道编程题,需要编写一个程序来解决问题。具体要求如下:

在整数数组中,找到两个数的和等于给定的目标值,返回这两个数的下标。 假设每个输入只有一个答案,而且不可以使用同一个元素两次。

输入格式

第一行输入一个整数 $n$,表示数组的长度。 第二行输入 $n$ 个整数 $nums_i$,表示数组中的元素。 第三行输入一个整数 $target$,表示目标值。

输出格式

如果存在两个数的和等于目标值,则输出这两个数的下标,即两个数在数组中的位置。 如果不存在这样的两个数,则输出 null

样例

输入

6
2 7 11 15 3 6
9

输出

[0,1]
解题思路

静态数组可以采用两个指针来解决此题,时间复杂度为 $O(n)$。 动态数组可以采用哈希表来解决此题,时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。

将此题分为两种情况讨论:

  1. 静态数组

静态数组需要用两个指针来解决问题,左指针指向数组的最左端,右指针指向数组的最右端。依次比较左右指针的数之和与目标值的大小,若小于目标值则左指针向右移动一位,若大于目标值则右指针向左移动一位,若等于目标值则输出两个指针的下标。

  1. 动态数组

动态数组可以采用哈希表来解决问题,用循环遍历数组中的每个元素,并在哈希表中查找目标值与当前元素之差是否存在,若存在则输出两个下标,否则将当前元素存入哈希表中。

代码实现

以下为静态数组的代码片段,使用 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