当前位置: 华文问答 > 科学

学习算法先看算法书还是先刷题?

2014-10-22科学

好家伙,上来就啃【 算法导论 】这种大黑书。。。。

年轻人,你这么渴望力量吗?(文末有我总结的力扣重点算法题目)

再渴望力量也要按部就班一步一步慢慢进步的啊,哪有一口吃成个胖子的道理。

先说结论:

不要直接上来就看书!

不要直接上来就看书!

不要直接上来就看书!

重要的事情说三遍!

计算机编程知识全靠自学,校招时顺利拿下百度、华为、字节跳动等offer,现在也在字节跳动写代码。

我当初在学习算法的时候,没有直接上来就啃书,而是选择了一种对小白比较友好的方式:先去看视频,再去刷题在实战中成长!

上干货!

特别是第一门王卓老师的课程,非常好!是我在B站上看到最好的算法类课程之一了!

我在以前的优秀编程类视频推荐中就提到过。

剩下的就是多去实战中成长和历练了,我主要使用的是力扣网和牛客网,

对了,如果你也是跟我以前一样,现在还在学校里读书,并且是打算在毕业后直接参加工作的话, 那么不妨看看下面这些已经上岸的一些学长学姐是如何上岸 互联网一线大厂如腾讯、阿里、字节跳动、美团、百度等公司,目前这份分享已经开源在github上了。

接着给大家分享一下我以前经历过几十场面试得出的结论吧。

在正式面试考察中,算法主要有以下重要知识点:

  • 十大排序算法的时间复杂度和空间复杂度是多少?最好情况和最坏情况下分别是多少?是否存在可以优化的点?
  • 线性结构:线性表和数组区别?什么时候该用线性表什么时候该用普通数组?
  • 查找:顺序查找、有序表查找、二分查找、差值查找、斐波那契查找、线性索引查找各自的定义和实现?你自己亲手写过吗?
  • 图:最短路径、最小生成树、拓扑排序、邻接矩阵/邻接表
  • 基本算法:分治、动态规划、贪心算法、回溯法、剪枝法、枚举法
  • 树:二叉查找树、平衡查找树、多路查找树、大小堆、字典树、并查集,就比如大顶堆和小顶堆的适用情形,是否深入理解过?
  • 复杂度:空间复杂度和时间复杂度该如何计算?for循环下的时间复杂度有几种情形?
  • 对了,这里推荐一个前段时间我发现的一个适合计算机专业从业人的网站,可以说是 宝藏级网站

    经常看到有人说学习编程找不到合适的资源,那么你可以在这个网站上找到很多不错的资源,并且都是分类好的了,都按照类别划分好了,并且都附赠了 下载地址

  • 编程语言:Java、C++、Golang、Python、前端、其他语言等
  • 计算机基础:操作系统、计算机网络、数据结构与算法、数据库、设计模式;
  • 电子书籍:开源仓库、电子书网站等
  • ....
  • 编程资源网

    此外,还有 社招校招 相关资源以及 考研考公 等资源,还是很多的。

    校招社招考研考公的资源

    网址地址:

    相遇即是有缘,我最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。

    BAT大厂必备!支持Java、C++、Go三种语言版本!谷歌大佬亲自总结的Leetcode刷题笔记~

    算法从考察角度来细分,可以分为:

    1、排序搜索算法,包括:冒泡、选择、插入、合并、快排、计数、基数、桶排、堆排、希尔、线性搜索、二分查找等。

    2、贪心算法,包括:最大流量算法、Dijkstra、Kruskal、Prim、Huffman等。

    3、动态规划,包括:Floyd、最长公共子序列,回溯、字符串匹配算法。

    排序

    十大排序考察较多的有:插入排序、归并排序、桶排序、选择排序、交换排序、计数排序、基数排序

    在我找工作前,我将 剑指offer刷完三遍、LeetCode以76%+正确率刷完400+道题 后,做足了准备后才去找的互联网招聘,还好最后成功拿到了 字节跳动的研发岗Offer

    我也总结了一些比较常见的互联网考察题型,以下回答主要来自于我的另一个回答中的总结题型:

    以前在准备秋招的时候刷过大概600多道力扣上的题,2遍的剑指offer,后来又将不少题型进行了二刷三刷,顺利了拿到字节跳动的SP offer。

    我不喜欢盲目刷题,所以不会可以刻意一些难题,我主要是为了面试而进行的刷题,现在把自己以前刷过的题目,进行精炼总结一下,对于一些质量不太好以及面试笔试中出现频率较低的题目被我筛掉了,最后还剩下300多道。

    专栏地址: 精选力扣300+道算法题

    前言

    本部分所有题目均来自于LeetCode网,并于每道题目下标明具体力扣网原题链接。

    关于更多本专栏的介绍可以点此了解阿秀的 秋招找工作经历与个人介绍

    本专栏介绍

  • 本专栏是阿秀本人在秋招前的于力扣网的刷题笔记整理总结,是按照如下14个标签进行刷题的,每个标签下具体又分为Easy、Medium、Hard三个等级
  • 本专栏适合于校招、社招工作党以及打算转行做计算机的非科班人士,适用于互联网求职笔试、面试而非算法类竞赛比如蓝桥杯等
  • 本专栏是我从将近600道算法题目中精选出300+道而成的,对于一些质量不太好以及面试笔试中出现频率较低的题目被阿秀筛掉了
  • 说到这里,分享一下我自己以前准备校招过程中做的一些 学习笔记 ,比如C++、计算机基础等的笔记分享给你,也正是因为这些笔记的存在才顺利拿到的字节跳动SP的offer!

    自己一个字一个字当时跟着视频中做
    阿秀个人在学习C++过程中的笔记链接:https:// pan.baidu.com/s/18XAu8O TsJmX_sfZ1qpmCcw 提取码:fw8s

    下面是具体分类

    1、数组

    2、字符串

    3、链表

    4、数学

    5、哈希表

    6、二分查找

    7、栈

    8、双指针

    9、贪心算法

    10、回溯算法

    11、动态规划

    12、深度优先搜索(DFS)

    13、树

    在我自己学习计算机的过程中,一直保持着学习,不断扩充知识面,坚持给自己充电,不至于被倒挂,平时看书的时候会去网上买书,但是那些书太贵了,所以就收集一些电子书来看。

    后来也慢慢的养成了收集书籍的爱好,再加上前段时间从一个电子书网站上收集到很多的计算机经典图书PDF书籍,网址是这个:https://www. pdf246eook.com ,貌似现在已经停服了。

    不知不觉间我已经收集 超过 1000 本, 吓了一跳!!

    现在 已经分享在github上 了,这可能是 整个GitHub上最全的计算机经典PDF仓库 了。

    其中涉及C/C++、Java、Python、Go语言等各种编程语言,还有数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经等~

    这可能是整个GitHub上最全的计算机经典PDF仓库了。

    地址1: https:// github.com/forthespada/ CS-Books (如果由于网络等等因素,如果不能访问可以尝试地址2)

    地址2 : https:// gitee.com/ForthEspada/C S-Books

    其中涉及C/C++、Java、Python、Go语言等各种编程语言,还有数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经等~

    精选力扣300+题目之数组

  • 414、第三大的数
  • 581. 最短无序连续子数组 很经典的题目,very nice
  • 605. 种花问题 也是很不错的题目
  • 628. 三个数的最大乘积
  • 643. 子数组最大平均数 I
  • 665. 非递减数列 很好的题
  • 674. 最长连续递增序列
  • 697. 数组的度
  • 717. 1比特与2比特字符
  • 724. 寻找数组的中心索引
  • 747. 至少是其他数字两倍的最大数
  • 830. 较大分组的位置
  • 840. 矩阵中的幻方
  • 849. 到最近的人的最大距离 好题
  • 888. 公平的糖果交换
  • 914. 卡牌分组 这也是道好题
  • 941. 有效的山脉数组
  • 989. 数组形式的整数加法 经典,很经典的题目,一步步渐进,直到最优解法
  • 1089. 复写零
  • 1128. 等价多米诺骨牌对的数量 好题,真的很好的题
  • 剑指 Offer 66. 构建乘积数组
  • 精选力扣300+题目之字符串

  • 13.罗马数字转整数
  • 67. 二进制求和
  • 434. 字符串中的单词数
  • 819. 最常见的单词
  • 859. 亲密字符串
  • 686. 重复叠加字符串匹配
  • 680. 验证回文字符串 Ⅱ
  • 精选力扣300+题目之链表

  • 21.合并两个有序链表
  • 206.反转链表
  • 237.删除链表中的节点
  • 精选力扣300+题目之二分查找

  • 167. 两数之和 II - 输入有序数组
  • 278. 第一个错误的版本
  • 350. 两个数组的交集 II
  • 367. 有效的完全平方数
  • 374. 猜数字大小
  • 392. 判断子序列
  • 441. 排列硬币
  • 475. 供暖器,很经典
  • 704. 二分查找
  • 744. 寻找比目标字母大的最小字母
  • 29. 两数相除
  • 34. 在排序数组中查找元素的第一个和最后一个位置
  • 153. 寻找旋转排序数组中的最小值
  • 162. 寻找峰值
  • 287. 寻找重复数
  • 378. 有序矩阵中第K小的元素
  • 436. 寻找右区间,很好的题
  • 454. 四数相加 II
  • 792. 匹配子序列的单词数
  • 精选力扣300+题目之双指针

  • 532.数组中的数对
  • 925.长按键入
  • 56.合并区间
  • 75. 颜色分类
  • 80. 删除排序数组中的重复项 II 很好的题目
  • 424. 替换后的最长重复字符
  • 485. 最大连续1的个数(easy)
  • 524. 通过删除字母匹配到字典里最长单词
  • 986. 区间列表的交集
  • 1004. 最大连续1的个数 III
  • 1498. 满足条件的子序列数目
  • 精选力扣300+题目之贪心算法

  • 944.删列造序
  • 1029.两地调度
  • 1046.最后一块石头的重量
  • 1049.最后一块石头的重量 II
  • 1217.玩筹码
  • 1221.分割平衡字符串
  • 精选力扣300+题目之深度优先搜寻(DFS)

  • 面试题 04.02.最小高度树
  • 104.二叉树的最大深度
  • 111.二叉树的最小深度
  • 200. 岛屿数量
  • 111. 二叉树的最小深度
  • 102. 二叉树的层序遍历
  • 107. 二叉树的层序遍历 II
  • 101. 对称二叉树
  • 以上是一些会重点考察的问题,建议在面试前好好刷刷!!!

    写了这么多手都酸了,如果我的上述回答对你有所帮助的话,帮@阿秀学长点个赞吗,感谢!

    卑微求个赞ing。。。算了,再给你分享一个宝贝吧, 这回应该总不会白嫖我了吧,一个赞就足够!

    最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!

    如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。

    推荐阅读

    最后再送上一些干货,下面是一个 高赞回答合集 ,建议你 点赞&收藏, 千万要Mark住啊,丢了可能就找不到了,因为你 大学学习计算机期间绝对用得上, 其中有好几个都是 收藏过万的回答。

    记得收藏的时候帮学长 @阿秀 点个赞呀!! 不要只收藏不点赞啊, (๑•̀ㅂ•́) ✧ 拒绝白嫖,人人有责!

    如果有 计算机学习、校招求职、考研、读研感兴趣 的小伙伴也可以点击下方卡片关注下阿秀鸭

    一直致力于分享 计算机学习、校招相关、硬核技术等 ,让你们不再让我走过的弯路!

    1、如果你也是准备校招的同学,可以看下这里,这是一些前人总结的历届校招上岸分享文章汇总。

    这是由字节跳动、阿里、腾讯三位计算机学长共同维护的计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)&计算机校招历届上岸分享合集,已经开源到github上了。

    2、学习编程其实没你想的那么难,完整复盘我系统准备校招&自学的那一年,好好阅读下去,对你肯定有所帮助。

    3、对于一些想要转行或者读研的朋友,下面两个回答肯定能帮到你!

    4、如果你决定不了到底学习C++还是Java,不妨来看看这个回答!还有就是建议多看经典书,而不是什么【七天教你学会Java】、【21天C++从入门到精通】系列,这类型的书完全是浪费时间,让你走歪路!

    5、Linux C/C++ 方向自学的完整路线,很多人不知道学习完 C++ Primer 能做什么项目练手,这个回答不可错过!

    6、如果你准备时间不多,就抓住重点,在最短的时间内搞定必要的数据结构和算法而去面试

    7、我自己在学习计算机过程中看过的优质网课,这些精品课程你的大学四年绝对够用了。