leetcode 1-两数之和 python

本文详细解析了在给定数组中寻找两数之和等于目标值的算法,包括暴力解法、字典方法及时间与空间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

PS:Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。

index()方法语法: str.index(str, beg=0, end=len(string))

1.可以对数组中的每一个元素进行遍历,用目标值减去遍历的元素值,得出的值与数组中的数进行比较。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            x = target - nums[i]
            if x in nums:
                j = nums.index(x)  
                if j != i:
                    return i,j

时间复杂度:O(n2),空间复杂度:O(1)  ( 因为python中list对象的存储结构采用的是线性表,因此其查询复杂度为O(n)。

那么if x in nums的时间复杂度就是O(n) )

 

2.暴力解法,遍历列表中的每一个值,然后再遍历不包括上一个值的每一个值,如果这两个值的和为目标值,返回。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n = len(nums)
        for x in range(n):
            for y in range(x+1,n):
                if nums[y] == target - nums[x]:
                    return x,y

 时间复杂度:O(n2)、空间复杂度:O(1)

 

3.还有一种字典的方法,时间复杂度:O(1) 、空间复杂度O(n) (python中dict对象的存储结构采用的是散列表(hash表),其在最优情况下查询复杂度为O(1))

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """           
        n = len(nums)
        d = {}
        for x in range(n):
            a = target - nums[x]
            #字典d中存在nums[x]时
            if nums[x] in d:
                return d[nums[x]],x
            #否则往字典增加键/值对
            else:
                d[a] = x
        #边往字典增加键/值对,边与nums[x]进行对比

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值