Jan 112021
 

其实我学过好几次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种以上的解答,抄过来是没啥意思的,关键还是自己能理解。我就把我能理解的记录下来。

解答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

https://draapho.github.io/2017/01/03/1701-python-list-dict/

https://leetcode-cn.com/problems/two-sum/solution/liang-zhi-zhi-he-pythonjie-fa-shi-yong-zi-dian-by-/

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.