代码随想录算法训练营第五天(4)|1. 两数之和

75 阅读1分钟

题目描述

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

代码示例

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        """
        寻找数组中两个数的和等于目标值的索引
        
        Parameters:
        - nums: 给定的整数数组
        - target: 目标值
        
        Returns:
        - List[int]: 包含两个数的索引列表,如果不存在则返回[-1, -1]
        """
        record = dict()  # 用字典记录数字及其索引
        for i, num in enumerate(nums):
            complement = target - num
            if complement in record:
                return [record[complement], i]  # 返回满足条件的索引
            else:
                record[num] = i  # 记录当前数字及其索引
        return [-1, -1]  # 未找到满足条件的索引,返回[-1, -1]

看到这个问题时,考虑采用两个循环的暴力解法,逐一检查每一对数字是否等于目标值。

然而,在阅读完代码随想录之后,我发现了更为高效的解决方案。通过利用哈希表,我可以将遍历过的数值存储在表中,以便在每次遍历时直接查找是否存在与当前元素匹配的目标值。这种方法的时间复杂度较低,能够更迅速地找到满足条件的索引。哈希表的运用使得算法更为优雅和高效。