专栏首页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

结束语

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

本文分享自微信公众号 - 程序员乔戈里(CXYqiaogeli),作者:乔戈里qgl

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 发现一个有趣的开源项目:通过动画教你学习算法

    学算法学累了吧?被算法虐的不轻吧?反正,我已经被虐的遍体鳞伤。所以今天呢,我给大家介绍一个开源项目,这个开源项目给我们提供了一个通过视图动画学习算法的环境。下面...

    乔戈里
  • 腾讯10年的架构师的算法学习经验分享

    拿到题目后就开始想着怎么写代码,结果写了大半天,发现越写越乱,最后就写不下去了,又或者是,看到题目后,一脸懵逼,完全不知道怎么下手。

    乔戈里
  • RNG输了,但我们不能输

    RNG输了,输在了轻敌,没有把G2当人看,随随便便bp,就是告诉你,我4保1奥巴马我也可以赢,结果啪啪啪打脸。

    乔戈里
  • 图解分布式一致性协议 Paxos 算法【BAT 面试题宝库附详尽答案解析】

    https://en.wikipedia.org/wiki/Paxos_(computer_science)

    一个会写诗的程序员
  • 分布式数据缓存中的一致性哈希算法

    一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的 Nginx 以及各类 RPC 框架中都有广泛的应用,它主要是为了解决传统哈希函数添加哈希表...

    remcarpediem
  • 分布式数据缓存中的一致性哈希算法

    一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的 Nginx 以及各类 RPC 框架中都有广泛的应用,它主要是为了解决传统哈希函数添加哈希表...

    remcarpediem
  • 分布式数据缓存中的一致性哈希算法

    一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的 Nginx 以及各类 RPC 框架中都有广泛的应用,它主要是为了解决传统哈希函数添加哈希表...

    黄泽杰
  • GoAccess日志分析工具

    GoAccess是一个非常良心的开源软件,它的良心之处体现在如下方面: 1)安装简单; 2)操作容易; 3)界面酷炫; GoAccess 官网 http...

    惨绿少年
  • 何为因?何为果?图灵奖得主Bengio有一个解 | ICLR 2020

    元学习又叫做学会学习,意思是拥有学习的能力,在深度学习文献中经常表示神经网络架构的自动化设计。

    AI科技评论
  • SVG 动画精髓

    villainhr

扫码关注云+社区

领取腾讯云代金券