Python学习-Leetcode刷题记1:两数之和

Python学习-Leetcode刷题记1:两数之和

问题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:给定 nums = [2, 7, 11, 15], target = 9;因为 nums[0] + nums[1] = 2 + 7 = 9;所以返回 [0, 1]。

解题思路

  1. 看到这个题目,我首先的想法就是需要遍历列表nums,且需要遍历两次。第一次遍历是确定第一个数;第二次遍历是寻找出第二个数,通过判断确定第一个数加第二个数等于target
  2. 于是就天真的使用了两次循环来去解题,果然,因为没有考虑到元素重复的问题,程序在某些特殊情况下报错了。(具体错误讲解请看下面的解题过程讲解)
  3. 经过一番演绎和思考后,确定需要使用到enumerate方法,是有这样才能完美的记录元素和元素的索引值,并将元素重复的问题考虑进去。

解题过程讲解

1. 错误的解题方法:

class Solution(object):
    def twoSum(self, nums, target):
        for i in nums:
            n=0
            while n<(len(nums)-1):
                if i+nums[n]==target:
                    i=nums.index(i)
                    nums[n]=nums.index(nums[n])
                    return [i,nums[n]]
                n+=1
s=Solution()
s.twoSum([-1,2,7,22,0,15], 1)

以上解法,如果列表中没有出现重复的元素,程序是没有问题的,但一旦有重复的元素时,将会有以下问题:
重复元素时产生的错误
如上图,当有重复元素时,给出索引值结果均为第一个元素的索引值,与题目的要求不相符合;

2.正确且优雅的解题方法:

class Solution:
    def twoSum(self, nums, target):
        another_nums = {}
        for index,num in enumerate(nums):
            another_num = target -num
            if another_num in another_nums:
                return [another_nums[another_num],index]
            another_nums[num]=index
        return none
s=Solution()
s.twoSum([2,7,11,15],9)

解法讲解:

  1. 创建一个字典,用于存储遍历每一个元素时的索引值和值;
  2. 通过算出当前值与target值的差,判断该差是否已存在字典中,如果存在,那么这一对值就已经被我们找到了,他们分别是numanother_num,我们可以通过返回他们在列表中的索引值来的得到结果;如果不存在,我们则需要将已经遍历了的值存到字典中去再继续往下进行遍历。

以上为LeetCode算法题两数之和我的个人解题思路及解题过程,借此记录分享,有不对的地方希望各位大佬指出,大家一起交流学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值