首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从入门到修仙的算法之路

从入门到修仙的算法之路

作者头像
乔戈里
发布2019-09-17 15:06:22
5690
发布2019-09-17 15:06:22
举报
文章被收录于专栏:Java那些事Java那些事Java那些事

前言

最近开展了每天一道leetcode/每天一道剑指offer的刷题活动,总有很多人问我,该如何刷题/零基础如何开始刷题,这里和大家分享一下我的经验。

算法的重要性(Why)

首先强调一下为啥要刷题,刷题的意义何在,只有知道了一件事的有多重要的意义,才能重视起来,进而采取行动,把它去搞好。

面试中都会考什么呢?/我怎么样才能拿到一个不错的offer?

问过我这个问题的,我经常会这么回答大家:面试中会考察基础/项目(准备几个亮点)/《剑指offer》,这里校招和社招区别就是社招问的项目多一些。

基础

  • 操作系统,数据库,计算机网络,编程语言这些,这些知识都是平时学习,记住了,理解了,不忘记就可以了,面试官问我们,可以说清楚咋回事就行,重在理解,切记死记硬背
项目

  • 项目或者经历是平时准备的,如果马上面试了再去准备也是很难的,作假在面试中会直接被面试官看穿,所以这个平时就要准备好,如果是校招,那平时就要做一做有用的项目(这里推荐一下牛客网叶神的项目),准备一两个项目亮点,看看这篇文章:可以作为你面试的项目亮点的文章,不来看看吗?,如果是社招,平时在工作中就要用心做。
算法

  • 算法和数据结构,是真的需要好好写代码才能掌握,不是说看了理解了就真正会的了,大家每天看我的题解知道了这个题的思路,也就是说是在看了理解了这个层面,而这种程度距离自己写出来还是有一定差距,你不自己去实现一下,你就不知道这道题有多难,提高算法能力一定要动手!!!提高算法能力一定要动手!!!提高算法能力一定要动手!!!

从这个问题中可以看到,拿到offer分为三个方面基础/项目/算法,算法就占了一个方面呢!重不重要?

再拿我现身说法吧,之前美团的面试,我的基础和项目回答的都很好,一面和二面面试官都对我赞赏有加,然后三面当时给我出了一个动态规划的题目,我在那想了半个点,最后面试官说你出去等通知吧,也就是说面试挂了,具体详情看我这篇文章,美团超详细面经(附答案)

总之,就是很重要

算法学习内容(What)

学什么?我在这里的话建议大家先学一些编程必须要会的基本功,然后去做题,这样你就知道你学到这些东西可以做出一些题目(把题目AC了),然后你就会有成就感,有了成就感,遇到更难的题目你就会自发的去学习更多的知识,这种自我激励机制我认为很重要。

第0步:

  • 打印你的第一行“hello world”;
  • 掌握java的if/else/for/while这些语句的使用,会用条件判断,以及会使用循环
  • 掌握数组,以及直到引用和传值的区别(int [] a a数组就是引用,去替体会引用的妙处,这里如果有C语言基础,那么就相当于C的指针
  • 然后是了解/使用java中在解题中经常会用的集合ArrayList/hashset/hashmap/treeset/treemap(要理解什么时候用这些东西,比如存不重复的数据那么第一时间相等hashset,比如存的数据还要有序,那么相等treeset,可以编程少写很多代码)这些可以先不搞懂底层原理,会调用api就行。
  • 了解如何计算最坏情况,最佳情况,平均时间复杂性度

以上必须掌握,以上掌握就可以做一些不涉及数据结构知识的题目。

数据结构的知识

步骤1

  • 单链表(在前面,后面,中间插入;在前面中间删除)
  • 双链表
  • 队列
  • 循环链表
  • 二叉树(普通的二叉树得会三种遍历树的方法/构建二叉树/求树的高度/二叉树的深度搜索/二叉树的层次遍历也就是广度搜索)
  • 二叉搜索树(理解二叉搜索树的性质,插入删除先不看,查找得会)
  • 二叉平衡树(平衡树先了解概念,插入删除左旋右旋先不看)
  • 堆(堆如果不懂,可以先不看)
  • 哈希

必知必会,可以说是刷题必会的数据结构基基基基础

步骤2

  • 学习一些基本的排序算法及其用例和时间复杂度。
  • 冒泡排序
  • 插入排序
  • 选择排序
  • 归并排序
  • 快速排序
  • 。。。七大排序
  • 二分查找

个人的刷题经验,掌握前两步大多数的《剑指offer》题目和leetcode的题目都可以刷了

第3步(进阶):

  • 把之前跳过的搞懂
  • 贪婪方法(Knapsack,Prim算法,Kruskal算法,Dijkstra,Bellmanford)
  • 动态编程(0/1背包,旅行商问题,硬币更换)
  • 回溯(N皇后问题)
  • BFS
  • DFS
  • 搜索元素
  • AVL树
  • 。。。。

如何学习(How)

学习方法

学习编程的时候看书还是看视频,这是很多人的疑问。

我说一下我比较看好的方法:**视频 + 书,两者结合起来。

对于初学编程的人,小白一个,什么都不会,我是强烈建议看视频学习入门的,我觉得看视频,有老师带着能很好的理解一些概念,以及看着老师在视频里面敲代码(这里要说明一下,如果老师只是照着ppt在念,那么这个视频就不要看了,念ppt谁都会),有老师带你,可以帮助你培养对编程的兴趣,不至于那么难了,慢慢的就可以入门了。

当你入门了一会,那么你肯定需要系统的学习编程知识的时候了,此时,应该以看书去系统地学习为主,视频中是不会给你扣的那么细的(太细,培训班的课程上不完了),所有你就必须看书,深入理解并且结合实战敲代码,把这些巩固起来。

这里说一我的经验,比如你刷题,出问题了,千万不要死盯着看,要把纸和笔拿出来去举个例子比划一下,你一下就知道是咋回事了,不是天才的我们是没法一下子写出AC的代码,自己要学会演示代码,找出bug所在;还有一个常用的方法就是把中间的结果打印出来。

资料推荐

资料推荐结合前面的What篇

  • What篇的第0步对应的基础知识可以去看毕向东(B站),如果只是为了快速上手刷题,那么跳过和我列无关的内容,掌握需要刷题的语法/集合的使用即可。

数据结构推荐

What篇的第1步和第2步,我强烈推荐一个在线网址(可能需要访问外国网站,大家先试一试能打开不)

  • https://visualgo.net/zh 里面对排序/链表/队列/二叉树/图等等,所有的内容都有一个详细的动画过程,非常方便你理解。(示例如下图)

上图示图形演示,下图是对应代码演示。(谁用谁知道

  • 视频课程的话推荐 浙江大学的mooc 这个口碑不错 https://www.icourse163.org/course/zju0901-93001 如果你有C语言基础,那么可以看看郝斌的数据结构教程。 数据结构: https://pan.baidu.com/s/1qQrHTdkvxMLSGv7G4nHWBw 密码:4o9p
  • 书籍的话推荐《大话数据结构》

算法推荐

  • 视频:牛客网算法视频
  • 书籍:《图解算法》 《啊哈算法》这两本入门,《程序员代码面试指南:IT名企算法与数据结构题目最优解 左程云著》,《剑指offer》这两本用来进阶面试。

七大排序算法推荐

  • 这里推荐我看过的两个很优秀的博客。 https://blog.csdn.net/morewindows/article/details/6684558 https://blog.csdn.net/whuslei/article/details/6442755

刷题网站

  • leetcode
  • 牛客网对应专题

成神/修仙之路

这里列几个我看过的大神的推荐算法学习路线(建议都看看,花不了多长时间,磨刀不误砍柴工,不要着急去干其他事情,多看看大神是怎么干的,可以帮你少走很多弯路)。

  • july大神 CSDN博客阅读量前100名 https://blog.csdn.net/v_JULY_v/article/details/19131887
  • 牛客网左神 https://www.nowcoder.com/discuss/61529
  • 斩获BAToffer手撕红黑树的剑谱兄 http://t.cn/ELbVOZ7

结束语

编程没有捷径,就是多看多练多想,时间上去了,能力也就上去了。这么用心,请我吃包辣条吧~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 算法的重要性(Why)
    • 基础
      • 项目
        • 算法
        • 算法学习内容(What)
          • 第0步:
            • 数据结构的知识
            • 如何学习(How)
              • 学习方法
                • 资料推荐
                • 成神/修仙之路
                • 结束语
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档