当前位置:   article > 正文

不要就知道leetcode,意外好用的刷题工具分享,了解高效刷题法,字节FB谷歌offer随便挑!...

leetcode pdf 谷歌

算法和数据结构不想花大量时间刷题?这篇文章应该能帮到你!

★写在前面:经验不足的选手建议不要一上来就拿leetcode来刷题,不是说leetcode不好,是真的不适合你们啊!

Leetcode题库虽说很强,但是数量太过于庞大,新手用起来最大的感受就是:一个知识点还没掌握,又来一个……结果就是最后一团浆糊,什么都记不住!

自己什么coding水平心里难道没数吗??

★以我从小白到ACM金牌选手多年的刷题经验,记住一下三点:

1、保持一颗坚持乐观的心态(60%的刷题选手都死在这上面了)
2、按照特定的分类来刷题(比如本周刷DFS,下周刷BFS)
3、构建自己的解题思路,拿到题目先思考,锁定题目最优解(如果实在做不出来,可以尝试看下别人的思路和题解,然后尝试自己解一遍)

cb609aa5627f72a83805993738bb2053.png

曾经有很多学员跟我抱怨,明明刷了200题,可是下次碰到同类型的题还是看不懂,心态直接崩了!

这就是我上面讲到的,刷题的目的是理解和举一反三,而不是背题(题库小的OA可以临阵磨枪一下),每学习一个专题(数据结构或算法),就去刷对应专题的题目去巩固你学的专题的内容。

04cbd66d39b6c676f75b3f13f7112694.png

这样归类式刷题,同一个题型不断重复才能理解透彻,巩固对应知识点,同时增强你的编程能力。

ddde09d27563cae71e07ed94b901598c.png

刷题是个长期的过程,不要一味追求短期数量,反而适得其反!

别问我为什么知道,我才不会告诉你当年我就是这样......

4f4b510c34e1cbd161a72d6c8bd1c36c.png

★下面分享我一路摸爬滚打下来的刷题攻略

Step1:新手如何找到题感
Step2:多题一解(推荐前中期的刷题顺序)
Step3:编码实现(大厂真题实操)

(ps:文章末尾附详细刷题顺序,有需要的直接下滑最后即可,建议收藏~)

bde1b85b2f186ff40edb1440007087f4.png

一、新手如何找到题感

如果你是新手,那么【新手必刷编程50题】就很适合你了,它能帮你较快梳理编程知识,尽快建立起完善的知识架构,让你刷题过程中更有题感。

3aea354185a0162766f4d3c83f02bf64.png

新手50道题是按知识点类型由易到难来的,每道题附带了详细的题解,完全不用担心看不懂的情况出现,短时间能帮梳理编程理论知识体系,特别适合新手快速入门。

a4c7c21a6b0fdd5ba866bbdea13ef76e.png

像这种最基本的数据类型,通过经典的题型帮助我们理解掌握算法的逻辑语言,一天刷个3-5道题,总体体验下来真的秒杀力扣几条街好嘛……

xg.zhihu.com/plugin/e1c

(ps:新用户注册就能免费用了,这50道题刷完更有助于完善编程知识框架哦~)

二、多题一解

就是把多种同类型的题先放在一起来做,也就是俗称的刷专题。国内炼码(lintcode)详细的将不同类型的题目进行了归类,大大提高了我们刷题的效率。

4b35a957c42a228329a483925daf8c00.png

每个小专题还可以根据我们的实际情况,选择题目难度、企业高频题、算法语言的选项进行题目的二级筛选,这个功能简直太周到了吧!

a455d785b08e429cdb289f971fff4f0c.png
xg.zhihu.com/plugin/622

(ps:注册就能使用这套题库了,大多数题目对新注册用户都是免费试用!

这样刷题的好处是,你可以很快了解一种类型题目的做题方法,加深对某类算法的理解,总结出做题的套路,久而久之你就会发现,题目不过是在某类解决办法方面做加法减法

★这里有一份推荐的刷题顺序

(一)建立编程思维,基础coding能力

  1. 基本数据类型
  2. 判断语句
  3. 数组与循环
  4. 字符串与循环
  5. 栈与队列
  6. 简单递归

(二)进阶中难题目,备战大厂真题

  1. 链表
  2. 二分法
  3. 二分答案
  4. 相向双指针
  5. 宽度优先搜索
  6. 二叉树遍历
  7. 二叉树&分治法
  8. 二叉搜索树
  9. 深度优先搜索
  10. 坐标型动态规划
  11. 背包型动态规划
  12. 匹配型动态规划

三、编码实现

前期的理论逻辑梳理清楚后,你已经完成了80%,剩下的就是你写代码的能力问题。很多同学都卡在了这方面。

其实这个问题唯一解决方案还是“题海战术”,多练习前期不要怕出错,慢慢才能找到自己coding not executed的问题所在!

刚开始的时候按自己的逻辑走一遍,再看看标准答案是怎么执行的,再跟着最优解走一遍,一定不要怕麻烦!看会了≠学会了!当你慢慢习惯了这种方式,你的代码能力会潜移默化的变强。

58a219d1f3accb4344bd128232b33bb7.png

像炼码(lintcode)有一个大厂题集,都是根据国内外最新春秋招真题在线收录的,可以直接拿来coding,特别省时省力。

60277384a712fb96030c1225829fc50f.png

0700cb4b48141d23242a16856fc81963.png

对于备考的同学们,我还是建议多拿真题上手,才能更直观的了解该企业的考试风格和能力侧重点,这也是我个人多年的面经小经验。

fee8f2cf49481f7efe034d22c32145a1.png

像它家都是在线coding后可以直接看到测试情况的,也是很多题库所不能及的,我觉得这个功能简直太人性化了,疯狂为lintcode工程师打call!

xg.zhihu.com/plugin/b6c

目前包括谷歌华为FB等大厂2022真题都是平台免费提供的!还等什么,赶紧注册账号免费用起来吧!

刷题顺序详解

★分享下自己总结的【LintCode 刷题顺序】,希望能帮助大家少走一些弯路。

(ps:下述题目编号即为lintcode题库编号)

1.基本数据类型

  1. 1 · A+B问题
  2. 37 · 反转一个三位整数
  3. 764 · 计算圆周长和面积
  4. 1300 · 巴什博弈

24d68b9077dc55835e7aa050000e824d.png

2.判断语句

  1. 23 · 判断数字与字母字符
  2. 766 · 闰年
  3. 145 · 大小写转换
  4. 1141 · 月份天数
  5. 283 · 三数之中的最大值

2e94a153e109111ab13111318483137e.png

3.数组与循环

  1. 25 · 打印X
  2. 539 · 移动零
  3. 297 · 寻找最大值
  4. 484 · 交换数组两个元素
  5. 9 · Fizz Buzz 问题
  6. 407 · 加一
  7. 463 · 整数排序
  8. 298 · 寻找素数
  9. 479 · 数组第二大数
  10. 46 · 主元素
  11. 768 · 杨辉三角
  12. 1334 · 旋转数组
  13. 767 · 翻转数组
  14. 53 · 翻转字符串
  15. 50 · 数组剔除元素后的乘积

15f0f0cef78d4b26a43957a86df91ebc.png

4.字符串与循环

  1. 8 · 旋转字符数组
  2. 491 · 回文数
  3. 422 · 最后一个单词的长度
  4. 353 · 最大字母
  5. 936 · 首字母大写
  6. 13 · 字符串查找
  7. 1535 · 转换成小写字母
  8. 1343 · 两字符串和

f793ab38edfa909e2a460e78c2ca70e2.png

5.栈与队列

  1. 263 · 小括号匹配
  2. 423 · 有效的括号序列
  3. 495 · 实现栈
  4. 492 · 队列维护

133a8f0e6225f0abfe39ac4a1d552a0d.png

6.简单递归

  1. 366 · 斐波纳契数列
  2. 66 · 二叉树的前序遍历
  3. 67 · 二叉树的中序遍历
  4. 68 · 二叉树的后序遍历

004fc4fcc670f82579d33fb4e49d9f6d.png

如果这些题刷完了,说明你已经逐步建立起编程的思维,能够完成一些简单的代码题,这时候就可以开始逐步进阶,完成一些更高level的题目,目标是能够应付大厂的算法题。

所以,这一阶段你可以按照面试中常考的知识点进行准备,主要包括:

链表、 二分法、二分答案、相向双指针、宽度优先搜索、二叉树遍历、二叉树&分治法、二叉搜索树、深度优先搜索、坐标型动态规划、背包型动态规划、匹配型动态规划

★进阶版对应题库:

(ps:下述题目编号即为lintcode题库编号)

c56342a87e6c2622df53d3d6e1d89294.png

7.链表

  1. 35 · 翻转链表(一)
  2. 36 · 翻转链表(二)
  3. 450 · K组翻转链表
  4. 102 · 带环链表
  5. 98 · 链表排序

c618794448c31e3cceafe74d12c2821a.png

8.二分法

  1. 14 · 二分查找
  2. 28 · 搜索二维矩阵
  3. 75 · 寻找峰值
  4. 457 · 经典二分查找问题

f043fa6edd4c04b744ee44b237dd292b.png

9.二分答案

  1. 183 · 木材加工
  2. 437 · 书籍复印
  3. 319 · 方阵排队

e2e738831459e43dd8268c5407e3ea9b.png

10.相向双指针

  1. 56 · 两数之和
  2. 57 · 三数之和
  3. 58 · 四数之和
  4. 363 · 接雨水
  5. 539 · 移动零
  6. 6 · 合并排序数组
  7. 32 · 最小子串覆盖
  8. 1870 · 全零子串的数量
  9. 547 · 两数组的交集
  10. 406 · 和大于S的最小子数组

0028f9d09e4f47bfed79d7743c3c529d.png

11.宽度优先搜索

  1. 433 · 岛屿的个数
  2. 615 · 课程表
  3. 120 · 单词接龙
  4. 178 · 图是否是树
  5. 278 · 绘制填充
  6. 787 · 迷宫

efac7ee39b21b153a6071cdb8e8a1d64.png

12.二叉树遍历

  1. 66 · 二叉树的前序遍历
  2. 67 · 二叉树的中序遍历
  3. 68 · 二叉树的后序遍历
  4. 69 · 二叉树的层次遍历
  5. 73 · 前序遍历和中序遍历树构造二叉树
  6. 72 · 中序遍历和后序遍历树构造二叉树

5903c72b2b8f0e5469e8ae0fbac13f2b.png

13.二叉树&分治法

854 · 二叉树中最近的叶子

ef13f210dbf14b9d61e041f2a50b69c2.png

14.二叉搜索树

  1. 902 · BST中第K小的元素
  2. 915 · BST的中序前驱节点
  3. 85 · 在二叉查找树中插入节点
  4. 95 · 验证二叉查找树
  5. 689 · 两数之和 - BST版本

51c4104a83537d0ab60510d54683d35d.png

15.深度优先搜索

  1. 634 · 单词矩阵
  2. 802 · 数独
  3. 652 · 因式分解
  4. 169 · 汉诺塔
  5. 425 · 电话号码的字母组合
  6. 33 · N皇后问题(一)

4690fa6d5f39cb4588817c21200f9779.png

16.坐标型动态规划

  1. 114 · 不同的路径
  2. 115 · 不同的路径 II
  3. 1827 · 停在原地的方案数2
  4. 76 · 最长上升子序列
  5. 109 · 数字三角形
  6. 1702 · 不同的子序列 II

5cd716d6b77ea8ae198dbbcee2b8ec74.png

17.背包型动态规划

  1. 669 · 换硬币
  2. 92 · 背包问题
  3. 125 · 背包问题(二)
  4. 440 · 背包问题 III
  5. 562 · 背包问题 IV
  6. 563 · 背包问题 V
  7. 724 · 最小划分

42b182131e573bb2077d639e507bf3e7.png

上述这些题目均出自lintcode题库,可以根据自己的实际需求选择对应模块的题目,赶紧刷起来吧!!

xg.zhihu.com/plugin/622

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/540673
推荐阅读
相关标签
  

闽ICP备14008679号