其实我学过好几次Python,基本都中途报废,一个重要的原因,其实就是没做练习。很多东西,看起来,都能看懂,也都能理解,不动手,就很难深入的理解,更别谈使用。
以前老听国外的同行说刷题进大公司,也不清楚他们在说啥。这下总算明白了。Leetcode 是一个非常有名的刷题网站,一道题目,你可以用多种语言来实现。
昨晚注册了一个账号,开始了刷题的生涯。在油管上很多视频帮忙解题,关键还是你要理解,自己能写出来。
据说这道题,Two Sum是网站成立的第一道题目,日后python的水平高低,就看刷题的数量。
网站做的非常不错,帮你验证你的代码是否正确,是否可以满足不同的条件。也让你尝试多个方法来解决一个问题。
关于编程的题目,基本都在这里
https://leetcode.com/problemset/algorithms/
我就选第一题来开始
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9,
we return [0, 1].
上面就是题目,现在至少看到有4种以上的解答,抄过来是没啥意思的,关键还是自己能理解。我就把我能理解的记录下来。
Contents
解答1:循环解决
这个应该是最简单直接的解答,不过我也费了半天,理解了,写下来,提交上去。
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range (len(nums)-1): for j in range (i+1,len(nums)): if nums[i]+nums[j]==target: return[i,j]
解答二:字典
理解真的比较费劲,这个应该也是我看到最简洁的答案, 我能理解,太过于巧妙,我是敲不出这样的代码。
为了加深我的理解,我把我的理解,也自己描述一遍。
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dic={} #key is diff, index as value for i,num in enumerate (nums): if num in dic: return (dic[num],i) else: diff=target-num dic[diff]=i
为了加深理解,我记录一下我的理解过程。
1:把nums的列表,加上索引。
2:dic,字典初始化的时候是空的。
3:当第一次运行,if 语句是False,直接运行else,把差值作为key,索引作为value。写入到字典里
4:第二次运行,检查当前的数字是否在字典里,如果存在,条件为True,就可以把相关数字的索引输出。因为字典里存放的是差值,如果当前数字等于差值,通过字典,获取到这个差值的索引,和当前数字的索引。
参考资料
http://icejoywoo.github.io/2019/03/19/python-iterate-list-and-dict.html