两数之和

两数之和

题目描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数:
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
示例:
输入:[3,2,4],6
返回值:[2,3]
题解思路
1.暴力解法
希望遍历数组找到数组中的两个数
需要使用两层for循环来遍历数组,第一层for循环相当于选取一个数;第二层for循环是用来判断(目标值target-第一层选取的那个数)是否存在于数组nums中;如果存在就输出两个点的下标,如果不存在就换另一个点进行查找。
完整代码

class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        res = [] # 返回结果
        # 遍历每个数
        for i in range(len(numbers)):
            # 在数组中找target-number[i]
            temp = target - number[i]
            for j in range(i+1,len(numbers)):
                # 找到了返回结果
                if temp == number[j]:
                    res.append(i+1)
                    res.append(j+1)
                    return res
        # 没找到,退出循环,返回空值
        return res

2.O(n)
定义一个空字典,遍历数组,当sec(=目标值target-当前数numbers[i])不存在于字典中时,将当前数字numbers[i]存入字典中,对应的值是其坐标;直到sec=target-numbers[i]在字典中时,输出sec=target-numbers[i]在字典中的值和当前索引。
因为题目描述要求下标是从1开始,所以,返回值中的索引要+1
完整代码

class Solution2:
    def twoSum(self , numbers , target ):
        # write code here
        # 定义空字典
        dict = {}
        n = len(numbers)
        # 遍历数组
        for i in range(n):
            # 目标值减去遍历数组当前元素的值sec
            sec = target - numbers[i]
            # 判断sec是否存在于字典中,如果不存在则将当前值写入字典中,下标为i
            if sec not in dict:
                dict[numbers[i]] = i
            else: # 存在,则证明找到了相加和为目标值的两个数,返回字典中数值和当前索引
                return [dict[sec]+1,i+1]
        # 循环结束,没有找到值,则返回空数组
        return []
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值