📜  门|门 IT 2006 |第 68 题(1)

📅  最后修改于: 2023-12-03 15:12:46.497000             🧑  作者: Mango

门|门 IT 2006 | 第 68 题

这道题目是门|门IT 2006年的第68题,是一道经典的编程题目,涉及到设计算法和编写代码。

题目描述:给定一个数组 nums 和一个目标值 target,请你在数组中找出和为目标值的那两个整数,并返回它们的数组下标。

例如,给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。

解决这个问题,有多种算法可以选择,比如暴力枚举、两遍哈希表、一遍哈希表等等。其中最优的算法是一遍哈希表,时间复杂度为 O(n)。

下面是一遍哈希表的实现代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {}
        for i, num in enumerate(nums):
            if target - num in hashmap:
                return [hashmap[target - num], i]
            hashmap[num] = i

以上代码中,我们采用了一个字典作为哈希表,将遍历过的数字和其下标存储起来。当遍历到当前数字时,检查哈希表中是否已经存在另一个数字与当前数字之和为目标值,如果存在则直接返回它们的下标即可。

这道题目虽然看似简单,却能够考察到编程的算法设计和优化能力。希望大家能够仔细思考,认真完成!