https://36kr.com/p/5084645

Leetcode,绕都绕不过去的程序员刷题神器

编者按:本文来自逆行求职(ID:nixingjihua)。

对所有求职技术岗位的童鞋来说,有这么一样东西恐怕做梦都会梦到【Leetcode】,绕都绕不过去的程序员刷题神器。

“哲学是世界观和方法论的统一,是具体科学知识的概括与总结。”

今天,逆行君就带你从世界观和方法论两方面走进“leetcode”

leetcode之世界观

什么是leetcode

简单来说,leetcode是一个美国的在线编程网站,它收集了各大公司的经典算法面试题,用户可以选择不同的语言进行代码的在线编写、编译和调试。

Leetcode目前有450题(依稀记得去年还只有340多道啊),分为三个难度easy、medium、和hard。题目大致分为两类:

1、基础算法的知识。

这些题里面有大量的算法题,解这些题都是有套路的,不是用递归(例如深度优先DFS,广度优先BFS),就是要用动态规划(Dynamic Programming),或是拆半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),还有大量的二叉树,数组、链表、字符串和hash表的操作。通过做这些题能让你对这些最基础的算法的思路有非常扎实的了解和训练。

2、编程题。比如:atoi,strstr,add two num,括号匹配,字符串乘法,通配符匹配,文件路径简化,Text Justification,反转单词等等,这些题的Edge Case,Corner Case有很多。这些题需要你想清楚了再做,只要你稍有疏忽,就会有几个case让你痛不欲生,而且一不小心就会让你的代码会写得又臭又长,无法阅读。通过做这些题,可以非常好的训练你对各种情况的考虑,以及你对程序代码组织的掌控(其实就是其中的状态变量)。

为什么一定是leetcode

Leetcode是注重算法的刷题工具,在考算法的笔试面试中,碰见原题的概率可算是非常大:

@飞龙:面试向算法,感觉没有比leetcode更合适的训练方法了。短期刷用处也很大,如果你对代码有感觉的话,一些巧妙的解法你看一眼就会忘不了。

@anonymity:参加了一些公司的笔试,看到过leetcode上的原题或近似题。最后,从了某公司的美国总部软件工程师的offer。学生们项目经验少,只能考算法。刷题很有用。

@yuquan wang:

会leetcode,不一定能拿offer

不会leetcode,基本拿不了offer.

leetcode之方法论

简而言之,就是,leetcode到底要怎么刷?

刷题的顺序,可以按不同的难度等级练习,先把easy的题目练完,再进阶medium,最后的hard就量力而为。广度优先的练习会让你快速掌握大部分题型,这样应对突发的面试笔试需求也可以信心十足,不会出现还没有练过的地方。

还不错是不是。

当然,要是按编号刷题太无聊,你也可以按Tag进行练习,举个例子,比如复习链表的内容,就选Linked List这部分的23个题目,刷完之后可以再总结一下常用的方法和数据结构构造方式。Tag分类在网页右边,如图:

不过按Tag来刷,也可能会在惯性思维下,去想关于Tag的算法。比如138. Copy List with Random Pointer(深拷贝链表),Tag:Hash Table。尽管是一个hard的题目,但是已经提示hash表,怎么样都会想到建立映射关系(而且目前最好的解法并不是使用的hash table)。

最后提供一种综合性思路,也就是在各个Tag分类里按不同的难度刷题,这样就既有广度也有深度了。

我们还想给你一些小技巧

01 善用Github

不少人都会一边做Leetcode的题目一边在Github上repo,这样不仅对自己的解题思路有所记录,还能方便查找。不少刷Leetcode的高手,他们的答案也是写在自己的Github上,你也可以通过Github成功找到他们。

02 善用Leetcode的讨论区

同一道题的解法往往不止一种,甚至思路和方式都会完全不同,例如这位同学所说:“边刷边感叹天外有天,比如有道很简单的一个int array只有一个数只出现了一次,其他数都是出现了两次,找出只出现一次的数。看到讨论区的答案是把所有element XOR起来,顿时膜拜” 所以一般很简单的题,也有必要看看讨论区的优秀答案,毕竟提升自己的算法水平才是正义目标啊。

重点,90%同学都不知道的讨论区在的正确打开方式:

从每道题目下方的Discuss按钮里点进去,才是每道题对应的讨论!

03 徒手写代码的能

很多同学在Leetcode上编得风生水起,但在笔试面试中遇到面试官拿出一张A4白纸,可能就懵逼了,改改涂涂半天写不完整。这个时候徒手写代码的能力就尤为突出了,无论你是先手写完代码再敲到网页上,还是代码AC(通过)后再默写一遍,徒手代码能力都是值得训练的,这也是你的整体思维和架构能力的体现。

04 善用碎片时间

有很多同学由于实习或者其他原因没有办法拿出大段时间来刷leetcode,这里为实习/工作/研究僧提供一个“一天一题时间表”:

1、早上起来出门前,迅速看一道题。

2.在拥挤的交通工具上,超脱自己,“冥想”题目。

3. 题目so easy,手机提交。

4. 短时不能通关?那就一直放在脑子里面想,到了公司/实验室,基本答案就可以动动手写在电脑上了。

5. 如前文所说,将思路和解决方案放到github上。

6. 晚上睡觉前,反思一下是不是最优解法,有时间的话看看discuss,没时间,把自己的解法理顺了,涉及的知识点再过一遍脑子。

05  菜鸟小白专用技巧栏目

对于基础不扎实的菜鸟选手,逆行君并不推荐按照前面提示的难度/tag进行刷题操作,有可能受思维暗示的影响不说,效率也会比较低下。

第一次刷,首先攻克array,string,tree,linkedlist,math这五个tag,好处在于可以迅速的在规避思维暗示的同时,迅速巩固数据结构的知识,或许还能掌握某种数据结构的小技巧。

每个tag内部就按照easy-medium-hard的顺序做,这样最开始一天刷10道easy,后面熟了这个数据结构一天也能刷5道难题,不会在初期被挫的刷不下去,培养一种刷题的“爽”感。

这个顺序完成之后,你已经完成了25%以上的进度条了,之后翻转顺序,从hard向easy进行刷题,开始会有点小虐,但后面就会效率奇高。刷完第一遍之后,就可以愉快的进行全tag刷题round 2了~

免费题解在这里

为了保证大家的刷题心情,大部分的题目的答案整理及分析,我们都给准备好了,画风是这样:

更多题解可以关注逆行求职(id:nixingjihua),回复leetcode获得。

互联网技术笔试总通不过?leetcode刷对了么的更多相关文章

  1. leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习

    想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...

  2. 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题

    大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...

  3. LeetCode刷题的一点个人建议和心得

    目录 1.    为什么我们要刷LeetCode? 2.    LeetCode的现状和问题 3.    本文的初衷 4.    LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...

  4. leetcode刷题--两数之和(简单)

    一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...

  5. LeetCode刷题指南(字符串)

    作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...

  6. LeetCode 刷题指南(1):为什么要刷题

    虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...

  7. 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到

    简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...

  8. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  9. LeetCode刷题总结-链表

    LeetCode刷题总结-链表 一.链表     链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...

随机推荐

  1. freetype相关总结

    FreeType-2.7 API : https://www.freetype.org/freetype2/docs/reference/ft2-basic_types.html ---------- ...

  2. 【后台管理系统】—— Ant Design Pro页面相关(二)

    一.弹框Modal表单 使用Form.create()包装得到一个含有this.props.form属性的CreatForm自组件 从页面主(父)组件获得props数据和propsMethod方法 r ...

  3. nw.js node-webkit基本程序结构与配置package.json配置说明

    (一)基本程序结构 如上图,是一个nw程序的基本组织结构,在根目录下有package.json(程序的配置文件)和index.html(可以是任意名称,应用的启动页面):js/css/resource ...

  4. eclipse经常卡死

    修改eclipse.ini 将启动内存,最小内存,最大内存都增大 eclipse是内存不够再去申请,直到有最大内存的 若上述方法不行则换eclipse    eclipse有的版本是不稳定的,我用Ke ...

  5. docker安装和hub

    yum install wget wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum list dock ...

  6. C++/C# 转化 Marshal VS Ptr

    Vidyo32.VidyoClientInEventLogin Login = new Vidyo32.VidyoClientInEventLogin(); Login.portalUri = thi ...

  7. Linux几个命令的升级替代品

    grep => ack, agack和ag是两个文本搜索工具,比自带的grep要好用得多.在指定目录下搜索文本时,它们不需要像grep那样指定各种命令行选项,输出结果也会包含文件名和行号,并且会 ...

  8. Dubbo分布式服务框架入门(附工程)

    要想了解Dubbo是什么,我们不防先了解它有什么用. 使用场景:比如我想开发一个网上商城项目,这个网上商城呢,比较复杂,分为pc端web管理后台,微信端销售公众号,那么我们分成四个项目,pc端网站,微 ...

  9. C# Hook 方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  10. 普通项目——>maven项目——>SSM(一)

    首先应该明白,SSM是什么? SSM指的是Spring+SpringMVC+MyBatis Spring Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体 ...