六十4、开始刷Leetcode之旅(Python版本)

@Author:Runsen前端

@Date:2020/6/4git

人生最重要的不是所站的位置,而是心里所朝的方向。只要我在每篇博文中写得本身体会,修炼身心;在天天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (做者:Runsen )github

做者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。致使翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。决定今天比昨天要更加努力。web

从大一写Python文章,到如今其都有上百篇,如今到了六十四,我以为这个时候应该去刷题了,其实不少学Python的都不是专科的,都是给培训机构宣传牛逼,其实在编程语言中,Python是最简单,最没有难度的编程语言。我在以后的文章都更新数据结构和Leetcode。都用Python解决的方法。其实Leetcode上的一部分题我都基本刷过,那么我就开始吧。算法

注册Leetcode帐号

目前Leetcod有国际和中文的两个版本,下图就是个人中文版本,刷的不够,其实我也挺菜的。这个是中文的网址:https://leetcode-cn.com/problemset/all/编程

下图就是个人国际版本,其实我主要在国际版混日子,刷了100多题,其实我很菜的。这是它的官网,https://leetcode.com。数组

不一样点,非中国区的人多点,作完了也能够参考下老外是用什么思路作的,挺好的。因此你比要到非中国区,看看老外是怎么干的。微信

Pycharm装Leetcode插件

直接打开Pycharm,依次点击File-Settings-Plugins-Maketplace ,而后在搜索框输入leetcode,就会显示咱们的leetcode editor插件,点击Install,跳出的界面点检accept,以后等待安装好就好了数据结构

我这个是安装好的了。app

若是你用vscode也是同样,给我装vscode插件。

由于,我习惯Python用Pycharm,Java用IDEA,前端用vscode。因此这Runsen使用Pycharm。

而后就是登录个人Leetcode帐号。

而后就是登陆你的帐号。

点击右下角,选择刷新或者加载按钮,就能够获取到leetcode中题库了,根据颜色能够区分题目的难易程度: 绿色-中等;黄色-简单; 红色-困难

更详细的使用说明参考文档:https://github.com/shuzijun/leetcode-editor

怎么刷Leetcode

之前菜鸡的我作法

之前Runsen的作法:

  1. 打开leetcode
  2. 启动Pycharm
  3. 开始思考,冷静分析
  4. 打开leetcode官网的评论区答案,寻找跟我同样的菜逼
  5. 满意离开评论区

上面其实都是像以前的我,都是菜鸡,其实如今我仍是菜鸡。

分类概括/总结

刷Leetcode,必须分类概括/总结

(1)、数组和相关题型

对于算法题,仍是有不少种题型须要去总结的,若是你懂这个题型,之后遇到相似的题,相信很快就能作出来的。有哪些题型能够总结呢?答是很是多,例如:

(1)、给你一个非负数的数组,求最大子数组和的长度

这算是一个题型,关于这个题型,有不少种变形、拓展,这里建议一块儿概括总结,例如:

(2)、刚才给的数组是非负数的,如今变一下,给的数组是可正可负。

还能继续拓展吗?答是能够的,例如:

(3)、给你个矩阵(即二维数组),求最大子矩阵和的面积

还有吗?有,例如刚才是求最大和,如今我改为求最大乘积。

我实际上是想告诉你,对于前期的学习,我建议分类刷题,总结题型,像我上面举的这些例子,遇到类似的,就直接能够秒杀了,由于这类题,没啥边界或者规律。

关于题型的,仍是不少的,我这里没法一一给你列举,只能靠你刷题的过程当中,进行分类、总结。不过我能够给你推荐一些资料,后面推荐。下面我在说一些题型吧。

三分学七分练

三分学七分练,这是我从极客时间的覃超,前Facebook工程师,传授的方法。

俗话说:学钢琴,三分学,七分练。其中练习是最为重要的一个环节,想学好钢琴必须得时常练习且多多益善。

因此刷Leetcode的最大的弊端都是:缺少练习。

两数相加

那么咱们就开始干他,Leetcode中的Hello World就是两数相加。

这个题是我2018年碰见了,如今2020年半,两年多时间。

#给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 
#
# 你能够假设每种输入只会对应一个答案。可是,数组中同一个元素不能使用两遍。 
#
# 示例: 
#
# 给定 nums = [2, 7, 11, 15], target = 9
#
#由于 nums[0] + nums[1] = 2 + 7 = 9
#因此返回 [0, 1]

# Related Topics 数组 哈希表

其实这一题真的很简单,无非就是将“昂贵”的时间复杂度转换成“廉价”的空间复杂度,把双重遍历,变成一次遍历。

这里最佳的方法就是使用字典。下面是我去年的代码,就是三种的解决方法。

列表解法

def twoSum_1( nums, target):
result = []
for i in range (len(nums)):
onenum = nums[i]
twonum = target - onenum
if twonum in nums:
j = nums.index(twonum)
if i != j:
result.append(i)
result.append(j)
return result

字典解法

def twoSum_2(nums,target):
dict={}
for i in range(len(nums)):
m = nums[i]
if target-m in dict:
return [dict[target-m],i]
dict[m] = i

字典推导式

def twosum_3(nums,target):
l = len(nums)
dict = {nums[i]:i for i in range(l)}
print(dict)
for j in range(l):
a = nums[j]
b = target - a
if b in dict and j != dict[b]:
return [j,dict[b]]

关于学习课程

在以前深刻Leetcode,学了下面的课程

所以下面的文章主要是总结回顾以前学到东西,只有不断地反复学习,才有新的突破。

以前的系列文章点击阅读原文,之前文章发的不少都整理了,微信公众号不支持修改文章,因此公众号没法整理专辑


本文分享自微信公众号 - Python之王(sen13717378202)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索