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. 错误的解题方法:

以上解法,如果列表中没有出现重复的元素,程序是没有问题的,但一旦有重复的元素时,将会有以下问题:
《Python学习-Leetcode刷题记1:两数之和》
如上图,当有重复元素时,给出索引值结果均为第一个元素的索引值,与题目的要求不相符合;

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

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据