两数之和(Python)

目录

题目描述

解题方法

解法一:暴力枚举

思路

复杂度

解法二:哈希表

思路

复杂度

题目描述

难度:简单

  • 给定一个整数数组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),因为在最坏情况下,哈希表需要存储数组中的所有元素。

你可能感兴趣的:(算法刷题,算法,数据结构,python,leetcode)