如何坚持刷算法题,搞定笔试

360 阅读3分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

相信好多同学和我一样,面对笔试束手无策,平时不能坚持刷题,严苛一点的公司正式面试前都需要笔试,面试也会问大量的算法问题,尤其是对于初级程序员更加看重算法能力。那我们该如何学习数据结构和算法呢,本篇文章我们一起来聊一聊。

1 了解算法题意在考察什么

程序 = 数据结构 + 算法 | 工程化项目 = 框架 + 业务逻辑(CRUD)

通俗的理解: 数据结构相当于厨具,算法相当于烹饪秘技,程序员相当于厨师。

一个好的厨师才会各种烹饪秘技,想要发挥出烹饪秘技就需要借助各种厨具(煎需要用煎锅,烤需要用烤箱、炖需要用炖的锅...)。

同理,一个好的工程师也应该会各种算法,通过不同的数据结构去解决实际问题。

算法题不光能考察候选人对数据结构算法的掌握情况,还能直接看出候选人的动手能力,手撕代码,白纸写算法是最考察基本功的了,同时能看出候选人的编码风格是不是简洁、高效、规范等等。

2 知道算法好坏的评价标准

算法好坏的评价标准一般是从两个角度考量的时间与空间

我们在学习一个算法时,必须得去了解它的时间复杂度和空间复杂度,从而对比算法的优劣。

时间与空间往往不能兼得,通常都是使用以空间换时间的策略,付出更多的硬件让用户得到更爽的访问体验。

分析算法复杂度时可以忽略常数,低次项,系数 3n²+2n+1 <=> n²

时间复杂度:时间复杂度往往是一个重点,可以表示算法执行效率。

空间复杂度:空间复杂度表示占用空间的情况。

算法复杂度排序,越小越优质。

O(1) < O(log₂n) < O(n) < O(nlog₂n) < O(n²) < O(n³) < O(nⁿ) < O(2ⁿ) < O(n!)

3 掌握每种数据结构的特性

学习算法和刷题之前最好能够去学习了解每种数据结构的特性,然后再学算法去灵活运用每种数据结构。

学数据结构一定要去了解它的访问、搜索、插入、删除的时间复杂度,这样才能了解它的优势是什么。

  • 数组

    • 简单数组
    • 稀疏数组
  • 链表

    • 单链表
    • 双链表
    • 循环链表
  • 队列

    • 二叉树
    • 二叉搜索树
    • AVL树
    • 红黑树
    • B树
    • 哈夫曼树
    • ...
  • 复合数据结构

    • 哈希表
    • 跳表
    • ...
  • ...

4 学习常见的算法

算法其实就是一些大牛总结的一系列解决问题的方法,这点与设计模式很类似,设计模式是针对面向对象的程序设计,算法是面向过程的一些列运算规则。

  • 十大排序算法

  • 查找算法

    • 二分查找
    • RK算法
    • BM算法
    • KMP算法
    • ...
  • 贪心算法

  • 动态规划

  • 加密算法

    • AES
    • RSA
    • ...
  • 哈希算法

    • MD5
    • SHA
    • ...
  • ...

5 学习途径推荐指南

  • 书籍 《小灰漫画算法》《算法》 《算法导论》

    由简单到困难到进阶

    《小灰漫画算法》

    《算法》

    《算法导论》

  • 视频

    《手把手带你刷LeetCode》 UP:爱学习的饲养员 (教刷LeetCode,很精炼挺不错)

    image.png

    《数据结构与算法基础-Java版》(罗召勇) UP: DT课堂... (全面,不墨迹)

    image.png

    《数据结构》 UP :尚硅谷韩顺平 (有点墨迹,内容很全面)

    image.png

  • 文章

    文章嘛,网上有很多,也有一些不错的公众号,我也会持续更新,关注我的算法专栏,哈哈。

6 总结

算法学习贵在坚持,任重而道远,希望我们能够一起加油,坚持学习。