zoukankan      html  css  js  c++  java
  • 算法成神之路,请看这一篇!

    随着自己写的越来越多,慢慢的就会有人和我主动交流,现在好多人希望我写一篇考研、就业的选择、零基础如何学习编程,秋招如何选择offer、等等

    我以前写过一篇初入阿里---10 天,我自己还想写一篇在阿里的三个月,将中间的点点滴滴分享给大家,还想写一篇自己的思考、和打法战略,以及你们 99% 的人欠缺的一种能力,还有自己的技术路线的分享,目前是 C 之旅

    要写的东西实在太多了,而我目前写公众号的时间,按一周时间计算,不能超过我睁眼时间的 1%,我 99% 的精力在其他地方,希望大家可以理解我,刚入职,还需要各方面能力的提升

    今天在这里着分享一波:数据结构与算法怎么学,以及今天为什么会写这块,真的是应了大部分读者的要求

    三个原因

    1、数据结构与算法真的是至关重要,我可是当年在写基础知识的时候,放到了第一位,公众号历史文章都有啊,你们要好好看

    2、不断的有人私聊问我在这方面的学习经验,我觉得是时候给你们分享一波了

    3、前一段时间总有人私聊我,给我推荐什么 google 的数据结构与算法课程,让我报名,我都很客气的说了一声:谢谢啊,暂时不需要,还一直说是特别好,一定要报,我之前忙于工作,今天就统一回复一下

    不是一两个人私聊我,从半个月前到现在,大概十几个人吧,我真的是醉了,课程好,你自己觉得合适,报名就对了,给我推荐,也没问题,我自己不报,还一直说做活动,便宜,讲的特别好,不报对我是一种巨大的损失之类的话,对于这部分人,我都直接拉黑、删除掉了

    在这里,好多人我没回,说一声,我真的是不需要,我相信,我应该比绝大部分人检索资料、信息的能力要强,以及接触信息的渠道要多,有些事情,不是我不知道,是我不需要,选择性的过滤了,有什么好的,我也希望大家多多给我分享,但是不要强人所难

    说真的,数据结构与算法,我的水平还算可以吧,给我点时间,准备准备,也是可以讲讲的,我当年在实验室,可是经常的给学第、学妹讲过这方面的课程,自己对其理解也是很深刻的

    数据结构

    对于我自己来说,秋招中的众多知识点,比如:操作系统、计算机网络、Linux、数据库、C、C++、数据结构、算法、项目之类,我自己最最最擅长的就是数据结构与算法

    举个例子:面试官问我,红黑树了解吗?

    我的回答是:我会从树--->二叉树--->完全二叉树--->AVL树--->红黑树--->B+/B-/B*树,以及四叉树、八叉树等等

    我先讲为什么需要这种数据结构,出现的背景是什么,解决什么问题,将关于树的整个体系系统都讲出来

    我在秋招的时候,是可以手写 AVL 树、红黑树、B+/B-/B*,图的邻接矩阵、邻接表,最短路径、迪杰斯特拉算法(Dijkstra算法)弗洛伊德算法(Floyd算法)等,所以自己对于数据结构是特别的自信,对于面试官问我,我都是说自己数据结构掌握的还不错,一定的有自己擅长的技术栈,这才是你与别人不一样的地方,是你自己的优势所在

    资料推荐

    1、数据结构:

    <大话数据结构>

    清华大学严蔚敏的 <数据结构>,C C++版都有

    这  2 本书都不错,上面的适合新手入门,下面的书籍适合进阶提升

    视频:

    黑马郝斌的 C 语言、数据结构,我都看过,讲的是真不错,特别适合Linux C/C++ 方向的同学去学习

    C 语言:

    https://www.bilibili.com/video/av8074534/?p=180

    数据结构:

    https://pan.baidu.com/s/1qQrHTdkvxMLSGv7G4nHWBw 
    密码:4o9p

    说真的,b 站还是有很多的好东西,一定要善于去发掘、去寻找好的资源

    2、算法

    <啊哈算法>,入门级别学习合适

    <编程之美>、<算法导论>,进阶提升必看

    <剑指offer>,LeetCode 找工作必备,刷至少 2 遍

    视频:

    推荐一个网站:七月算法

    算法导论:

    https://pan.baidu.com/s/1Bm34-92TwN5TbMOXfPkY6g 
    密码:1i38

    3、隆重推荐

    适合于C/C++ java python 任何方向去学习数据结构与算法,我大学期间,学习与找工作,最常去学习的地方

    牛客网,左神,应届生找工作的,逛过牛客网的,应该都知道左神的大名吧

    在看看下面的课程:

    左神的一本神书:

    <程序员代码面试指南:IT名企算法与数据结构题目最优解 左程云著>

    java 写的,有需要的可以买一本学习

    我首先说明一下,我没有给任何网站打广告,我就是把自己当年走过的路,自己通过什么资料,什么视频,在什么网站进行学习,真实的分享给大家,有用的,你们借鉴,没用的,觉得我这个方法过时了,完全可以不必理会的

    网址:

    https://www.nowcoder.com/courses/semester/algorithm-elementary

    算法之路

    三步走战略:看视频 + 看书 + 刷算法

    1、

    我是在大二的下半学期开始接触的数据结构,我一开始的学习,是看书理解里面的简单逻辑,和听视频的讲解,也是边摸索边进行学习,对于那时候的自己,完全是小白水平

    大二的下学期,可以说是在找学习编程的感觉,让自己激发兴趣,兴趣是最好的老师,一定的让自己喜欢上数据结构与算法,实现了什么数据结构或者做出了哪道算法,会对自己是一个正向的激励,会让自己有更大的兴趣,去解决更难的问题,记住:在什么阶段做什么难度的题

    不要光刷题,一直想不出来,是很痛苦的一件事情,要学会用数据结构或者算法去解决项目中的实际问题,去做优化与改进,这块在大三的时候,结合着来,我不建议,太有针对性的去刷题

    2、

    大三的上学期以及寒假,是我主要学习数据结构与算法的大半年时间,在这个阶段,我逐渐脱离了视频(视频适合初级阶段,适合于大二学习),对于数据结构与算法,学到后期,必须的靠自己,不能在一味的依赖于视频中的讲解

    我是这样的,通过看书,来实现一些数据结构,以及开始有针对性的提高自己的算法能力,数据结构,来回就那些东西,只要理清了之间的逻辑,思路清晰,反复的去实现几遍就好,难度相对于算法还是简单一些,数据结构,关键是理解数据与数据之间的存储关系,多做笔记,整理,疏通关系

    算法,我觉得是挺有难度的,挺考验人的智商的,因为算法的实现思路,很奇特,刷过算法的,就懂,有些思路是取巧,有些是剑走偏锋,根本想不到,只能的先去看别人的思想,理解好,在实现出来

    经常看别人的思路,不要觉得很丢人,这是正常的,不会了,实在想不出来了,就去看别人的实现思路,对于同一个问题,用不同的算法实现,带来的可是本质的区别,一定要有对时间复杂度有着极致的追求,去寻找最完美的解决方法,多思考,多花时间去理解清楚

    3、

    我当时,是拿小本本,对于数据结构和算法中,不清晰的地方,拿本子画清楚,不要光想,一定要动手去画,想明白了,理清了各种逻辑,代码的实现是很容易的,关键就是担心没思路,脑子是乱的

    当时自己的时间安排,就是每天都会抽时间去学会数据结构,做几道算法题,去 leetcode 或者牛客网上面,从最简单的题刷起,说白了,这个就在于坚持,和自己有没有决心去学好

    快找工作的时候,是必须要刷一波算法题的,刷的时间久了,你会慢慢的爱上它的,很有趣,很奇妙的感觉,以及带给自己莫名的快感,慢慢的你就会刷上瘾了,着迷其中

    强调三点

    1、需要明确一下:数据结构、算法需要掌握哪些知识点,这块,你翻看书的目录,以及看一些课程大纲都有写到,那块会很详细的有说明

    数据结构:链表、栈、队列、字符串、矩阵、树、图

    算法:排序、字符串、数组、递归、五大算法(动态规划、贪心。。。)

    2、对于数据结构与算法的实现,不要纠结于C、C++、java、python、语言是其次,关键是实现的细节以及方法,选一门自己喜欢的语言,去学习数据结构与算法就好

    3、书、视频,我都已经推荐过了,对于小白的话,建议先看看视频,理解理解,多听听别人思路,看看是怎么解题的,初步阶段,一定要选择简单的、自己能很快理解的去学习,由浅入深,慢慢的给自己信心

    我想说的

    算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去牛客网看看,各路大神,各种解决思路,你一定会有进步的

     

    一开始,学习数据结构与算法,是枯燥的,是乏味的,因为你还不够了解到它的魅力,但是时间久了,你真的会爱上它,离不开它,与你血肉相连,伴你编程终生,在以后的学习道路中(不仅仅是技术方面),都会潜移默化的对你产生影响

    数据结构与算法,给我带来的是,逻辑缜密性的提升,对我的性格、做人都产生了影响,我是强烈的建议,大家一定的好好学习,悟出自己的学习之道,那么你的路将会走的更远,更久

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/ysgcs/p/9742781.html
Copyright © 2011-2022 走看看