LeetCode tow Sum 两数之和

简介: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

v2-53fae8d8b06495a8d13abce798ed2c9f_1440w.jpg

题目描述



给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。


1. 第一种最直接的思路是枚举每一种组合,看看他们是否满足题意,我们需要用到两个 for 循环。


  • TwoSum I 暴力版本
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 数组长度
        length = len(nums)
        for i in range(length):
            for j in range(i + 1, length):
                if nums[j] == target - nums[i]:
                    return [i, j]
        # 不存在这么两个数
        return [-1, -1]
  • 这种情况的时间复杂度是 O(N^2),空间复杂度是 O(1)。


2. towSum 的另外一种思路是使用 hash 表,在上面的第二个循环中,我们是要找另一个数是否也在给定的数组中,这种判断元素是否在集合中的操作适合用 hash 表来做。

  • TwoSum I 哈希表版本
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 构建一个字典,键为 nums 中的数字,值为该数字在数组中的位置
        # 使用 python 内置函数 enumerate
        num_pos_dict = {num: pos for pos, num in enumerate(nums)}
        # 遍历数组,同时获取 `位置` 和该 `位置的值`
        for pos, num in enumerate(nums):
            # 另一个数字
            other = target - num
            # 另一个数字可能在 num_pos_dict 中的值
            other_pos = num_pos_dict.get(other, -1)
            # 如果 other 存在并且不是 num 本身
            if other in num_pos_dict and other_pos != pos:
                return [pos, other_pos]
        # 结果不存在
        return [-1, -1]


目录
相关文章
|
1天前
|
存储 算法 索引
力扣经典150题第四十三题:两数之和
力扣经典150题第四十三题:两数之和
5 1
|
1天前
|
算法 测试技术 程序员
力扣经典150题第二十七题:两数之和 II - 输入有序数组
力扣经典150题第二十七题:两数之和 II - 输入有序数组
5 1
|
4天前
力扣-两数之和
力扣-两数之和
6 1
|
19天前
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
|
24天前
|
存储 算法 Java
【经典算法】LeetCode1:两数之和(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode1:两数之和(Java/C/Python3实现含注释说明,Easy)
14 1
|
16天前
【LeetCode刷题】两数之和、两数相加
【LeetCode刷题】两数之和、两数相加
|
19天前
|
存储 算法 大数据
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
|
19天前
|
存储 SQL 数据挖掘
LeetCode 第一题:两数之和 【1/1000 python】
LeetCode 第一题:两数之和 【1/1000 python】
|
1月前
|
算法 C语言 C++
|
1月前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
18 1