从入门到修仙的算法之路

前言

最近开展了每天一道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

    640?wx_fmt=gif

    上图示图形演示,下图是对应代码演示。(谁用谁知道640?wx_fmt=gif

  • 视频课程的话推荐 浙江大学的mooc 这个口碑不错

  • 书籍的话推荐《大话数据结构》

算法推荐

  • 视频:牛客网算法视频

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

七大排序算法推荐

  • 这里推荐我看过的两个很优秀的博客。

刷题网站

  • leetcode

  • 牛客网对应专题

成神/修仙之路

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

  • july大神 CSDN博客阅读量前100名

  • 牛客网左神

  • 斩获BAToffer手撕红黑树的剑谱兄

结束语

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

关于本号

作者乔戈里亲历2019秋招,哈工大计算机本硕,百度java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。

640?wx_fmt=png

3T编程资料等你来拿


等等,先别走![程序员乔戈里]公众号又有活动了!参与活动,不仅可以培养自己良好的习惯,还能拿到“现金红包与书籍奖励”,动作要快,姿势要帅!

戳我看详情

640?wx_fmt=jpeg

640?wx_fmt=png

今日问题:

看完以后,你对算法学习有了一个怎样的认知?

留言格式:

打卡xx天,答:xxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值