AK F.*ing leetcode 流浪计划

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

文章目录

什么是AK leetcode 流浪计划
为什么取名 AK leetcode 流浪计划
文章内容及形式
内容选题
文章的形式
做这个的意义
什么人可以看
必要条件
适用人群
读者应该如何操作
实践流程
注意事项
总结

什么是AK leetcode 流浪计划

"AK leetcode 流浪计划"是常用算法学习系列文章。旨在介绍通过学习常用的数据结构与算法,通过相关题目的练习提升自身编程与解题能力,达到能够独立思考解出大部leetcode里题目的目的。

为什么取名 AK leetcode 流浪计划

“AK leetcode” 是要把leetcode里涉及到的算法学到,通过训练做到独立思考解出大部leetcode里题目(哪怕思考不出来的,用的数据结构肯定也是自己掌握的)。

几点说明:

  1. 这里说的AK有2层意思:一个是对于leetcode上面的题是有能力去AK,但是由于个人时间问题加之leetcode上很多题本质上是重复的,不可能也没必要真的去全都做(当然有兴趣且有时间的人是可以真的AK)。再一个是对于学过的算法可以掌握其思想,并且可以动手写出代码。
  2. 由于个人对算法的更深度不同还有临时状态问题,不一定所有的题目都可以独立思考出来,但通过别人的思路自己也能很快的联想到,并实现。

"流浪"的话是完成些内容时间久,没有预期(大概1到2年吧)。

自己时间有限,不可能在短期内把这些内容做完。也不知道什么时候可以弄完,现在整理的算法也不是很细,后面也有可能进行修改和添加。

文章内容及形式

内容选题

  1. 主要是leetcode上用到算法的为主。
  2. 也有其他比较经典的算法。
  3. 也有自己对于某种思想总结出来做题的方法论(套路)。

看上面这个图,其实leetcode这么多年了,总体算法知识的范围是固定的(可枚举的)。所以是可以通过有限的时间学习去一一掌握的。胡乱学不如一个一个攻克,有些编程能力或知识不管哪个算法都是通用的。我会选择里面的一些固定的数据结构或者固定套路的算法或思想来写。比如并查集就是一种数据结构,二分查找其实是一种思想。当然有些数据结构的使用也是有套路可言的,我也会总结分享出来。

leetcode总体难度是中等,难题少,我会去别的网站上搞一些来补充。

还有些经典算法,比如说KMP,排序等一些以前书里学习过的。

具体的内容我都整理在公众号里的常用算法链接,点击算法->常用算法学习就可以找到。

文章的形式

分2类:数据结构型和应用型

数据结构指的是有固定数据结构模板的算法。这类我会1)把书里的知识(比较核心的思想或过程)表述出来。2)总结一下应用场景,3)给出数据定义和伪代码(可以根据伪代码自己实现一下)。4)给出一个实现样例。5)结合真题来演示一下应用过程。6)给出一些算法上注意的点以及优化的思路。7)列出真题供大家练习提高。

应用型指的是一种算法思想。

这类主要是写应用方法论(套路)。这类我会1)给出方法论步骤,2)总结一下应用场景,3)伪代码框架。4)结合真题来演示一下应用过程。5)给出优化的思路。6)列出真题供大家练习提高。

做这个的意义

对我个人而言,想锻炼一下自己的总结思考和表达能力。加深一下对常用数据结构和算法的理解与应用。给我的公众号找一个可持续发展的内容来源。

对大家而言,可以有一个知识范围可以参考。了解算法的原理。一些常用算法解题方法论。了解解题过程中的注意事。了解如何高效的去学习和复习算法知识。

什么人可以看

必要条件

  1. 至少会一门编程语言
  2. 接触过数据结构与算法或者想接触

适用人群

  1. 想刷leetcode
  2. 想搞懂以前学过的基础数据结构知识
  3. 想提高面试里算法题环节
  4. 想了解常用做题算法
  5. 不知道做哪些题
  6. 不知道学习哪些数据结构

读者应该如何操作

实践流程

  1. 通过手动演算或脑力思考理解文章中提到的算法及计算过程(如果文章里总结得不好,可以找些辅助资料看看。)
  2. 对文章中提到的算法一定要亲自动手写一下。
  3. 有些是代码是模板,在初级阶段要自己写,后来熟练了可以间隔写。在不紧急的情况下隔一段时间要自己实现一下。
  4. 对于文章中的例题一定要自己去AC掉。注意是AC不是写出代码就好。
  5. 对于文章最后面的题目,抽空做几个(每天少打一局游戏)。看自己的时间吧。

注意事项

  1. 有时候算法或者题目会比较难理解或想不出来。此时要根据自己的能力和时间做出妥协。要看看别人的思路。基本过程如下:题目没思路,先看看别人的提示,自己思考,不会就继续看详解,然后自己实现,实现如果也有困难就看代码。最后一定要落实到代码上,不要眼高手低。多写代码对提高算法理解也很有帮助。
  2. 在设计思路时,要严谨,争取一次通过。自己想出来的结论要有证明(不会也要看别的,做到理解),对于测试用例设计要考虑全面(这是经验活),有些错误看代码是看不出来的,测试用例一跑就一目了解了。由于测试用命设计不好而没有通过的要总结,防止下次再犯。我总结一下用例的一些基本方法:1)各种数据规模要覆盖到,如告诉你0=<N<=10^9, 那么我会这么取0, 1, 2, (中间随便搞几个), 10^9,就是从最小到中间到最大,都要设计出来。2)要自己思考一些特殊用例,然后去构造。比如有除法时要设计一个除0的用例看看输出是什么。3)多组用例同时测试,有时候是一组测试是没有问题,多组跑一次就有问题。
  3. 对后最后的题目,优先做leetcode(不会就看照1做),最少做五题,可以不用一口气做完,慢慢做。

总结

这是一个专门针对leetcode解题的系列文章。介绍常用算法的原理及应用(算法列表可以到公众号查看,后续会更新优化)。适合想学习一些基础算法,想提高编程能力的同学看。希望可以让大家学习时更有目的性,少走弯路,提升编程能力,对算法的理解与应用能力,提升自主思考与解题能力。

最后,再好的方法也不如持久的坚持。让我们动起来,一个一个攻克算法,一步一步提升,早日实现自己心中的目标。

已学算法

并查集

矩阵

动态规划

二分查找

回文串

前缀和


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。

在这里插入图片描述