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月前
|
C++
Leetcode第一题(两数之和)
这篇文章介绍了解决LeetCode第一题“两数之和”的两种方法:暴力法和哈希表法,并提供了相应的C++代码实现。
28 0
Leetcode第一题(两数之和)
|
1月前
|
存储 C++ 容器
【LeetCode 13】1.两数之和
【LeetCode 13】1.两数之和
14 0
|
3月前
|
存储 索引
LeetCode------两数之和(3)【数组】
这篇文章介绍了LeetCode上的"两数之和"问题,提供了两种解法:一种是暴力求解法,通过双层循环遍历数组元素对查找两数之和为目标值的索引,时间复杂度为O(n^2);另一种是使用HashMap优化,通过存储元素值和索引,时间复杂度降低到O(n)。
LeetCode------两数之和(3)【数组】
|
3月前
|
算法
LeetCode第1题两数之和
该文章介绍了 LeetCode 第 1 题两数之和的解法,通过使用 HashMap 来记录数组元素及其下标,以 O(n)的时间复杂度解决问题。
|
3月前
|
JavaScript 前端开发 PHP
leetcode——两数之和【一】
leetcode——两数之和【一】
28 0
|
3月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
39 0
|
5月前
|
存储 算法 索引
力扣经典150题第四十三题:两数之和
力扣经典150题第四十三题:两数之和
29 1
|
5月前
|
算法 测试技术 程序员
力扣经典150题第二十七题:两数之和 II - 输入有序数组
力扣经典150题第二十七题:两数之和 II - 输入有序数组
30 1
|
5月前
力扣-两数之和
力扣-两数之和
|
5月前
【LeetCode刷题】两数之和、两数相加
【LeetCode刷题】两数之和、两数相加