互联网技术笔试总通不过?leetcode刷对了么
https://36kr.com/p/5084645
编者按:本文来自逆行求职(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刷对了么的更多相关文章
- leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习
想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...
- 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题
大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...
- LeetCode刷题的一点个人建议和心得
目录 1. 为什么我们要刷LeetCode? 2. LeetCode的现状和问题 3. 本文的初衷 4. LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...
- leetcode刷题--两数之和(简单)
一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- LeetCode 刷题指南(1):为什么要刷题
虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...
- 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到
简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- LeetCode刷题总结-链表
LeetCode刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
随机推荐
- 根据linux自带的JDK,配置JAVA_HOME目录
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos6.5是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java ...
- splice()、slice()、split()函数的区分
1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...
- sqli-labs29-31关Background-6 服务器(两层)架构
首先介绍一下29,30,31这三关的基本情况: 服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器.工作流 ...
- 关于MySQL去除查询结果重复值
下面先来看看例子: table: id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. 比如我想用一条语句查询得到name不重 ...
- REST framework 之 分页
DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...
- Spring下面的@Transactional注解的讲解
摘自: https://www.cnblogs.com/xiohao/p/4808088.html Spring下面的@Transactional注解标志的讲解 最近在开发中对Spring中的事务标记 ...
- SpringBoot,用200行代码完成一个一二级分布式缓存
缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...
- Jmeter之非GUI模式(命令行)执行
在使用Jmeter进行性能测试时,建议使用非GUI模式执行. 命令行启动 1.进入jmeter安装的bin目录 2.执行Jmeter命令 如下: (1.jmeter.bat -n -t E:\apac ...
- flutter 处理dialog点击事件回调
flutter 处理dialog点击事件回调 import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_m ...
- TCP的三次握手过程
TCP::传输控制协议(Transmission Control Protocol ) 是一种面相连接的.可靠的.基于字节流的 传输层通信协议. TCP是一种面相连接的协议.其显著的特点就是在 ...