目录

题目描述

解题方法

解法一:暴力枚举

思路

复杂度

解法二:哈希表

思路

复杂度

题目描述

难度:简单

  • 给定一个整数数组nums和一个目标值target,要求在数组nums中找出两个数,使它们的和等于目标值target。并返回这两个数在数组中的索引。
  • 例如,给定nums = [2, 7, 11, 15]target = 9,因为nums[0] + nums[1] = 2 + 7 = 9,所以应该返回[0, 1]
  • 解题方法

    解法一:暴力枚举

    class Solution:
        def twoSum(self, nums: List[int], target: int) -> List[int]:
            for i in range(len(nums)):
                for j in range(i+1, len(nums)):
                    if nums[i] + nums[j] == target:
                        return [i, j]

    思路

            使用两层嵌套循环遍历数组中的每一对元素,计算它们的和,并与目标值target进行比较。如果找到一对元素的和等于target,则返回它们的索引。

    复杂度

  • 时间复杂度:O({N}^2),其中n是数组nums的长度。因为对于数组中的每个元素,都需要遍历它后面的所有元素来检查是否满足条件。
  • 空间复杂度:O(1),因为只需要使用常数级别的额外空间来存储变量。
  • 解法二:哈希表

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

    思路

            遍历数组nums,对于每个元素num,计算另一个数complement = target - num。然后检查complement是否已经在哈希表中。如果在,说明已经找到了两个数的和等于target,可以直接返回它们的索引;如果不在,则将当前元素num及其索引i存入哈希表中,继续遍历下一个元素。

    复杂度

            时间复杂度:O(N),其中n是数组nums的长度。因为只需要遍历数组一次,每次查找哈希表的操作时间复杂度近似为O(1)

            空间复杂度:O(N),因为在最坏情况下,哈希表需要存储数组中的所有元素。

    作者:QRSN

    物联沃分享整理
    物联沃-IOTWORD物联网 » 两数之和(Python)

    发表回复