diff --git a/README.md b/README.md index 5c7df72514653562533e3ac6e77c9c83ef813462..cd58f317076d3603b47a13f7bd960c49f1c8ddec 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,22 @@ # 一、前言 -我曾经尝试在网上有不少学习算法的资料,但真的让我挺无语,要么就是太零散,要么就是笔记性质别人都看不懂。我这个纯靠自学的小童鞋,花了一年时间自己写一份算法小抄,总共 **60 多篇原创文章**,够通俗,绝不是简单的代码堆砌,下面有目录,质量如何,这里就不废话了。 +本仓库总共 60 多篇原创文章,基本上都是基于 LeetCode 的题目,涵盖了所有题型和技巧,而且一定要做到**举一反三,通俗易懂**,绝不是简单的代码堆砌,后面有目录。 + +我先吐槽几句。**刷题刷题,刷的是题,培养的是思维,本仓库的目的就是传递这种算法思维**。我要是只写一个包含 LeetCode 题目代码的仓库,有个锤子用?没有思路解释,没有思维框架,顶多写个时间复杂度,那玩意一眼就能看出来。 + +只想要答案的话很容易,题目评论区五花八门的答案,动不动就秀 python 一行代码解决,有那么多人点赞。问题是,你去做算法题,是去学习编程语言的奇技淫巧的,还是学习算法思维的呢?你的快乐,到底源自复制别人的一行代码通过测试,已完成题目 +1,还是源自自己通过逻辑推理和算法框架不看答案写出解法? + +网上总有大佬喷我,说我写这玩意太基础了,根本没必要啰嗦。我只能说大家刷算法就是找工作吃饭的,不是打竞赛的,我也是一路摸爬滚打过来的,我们要的是清楚明白有所得,不是故弄玄虚无所指。不想办法做到通俗易懂,难道要上来先把《算法导论》吹上天,然后把人家都心怀敬仰地劝退?别的不说,公众号几万读者,PDF 版本上万次下载,联系我的出版社都好几家,说明质量还过得去吧? + +**做啥事情做多了,都能发现套路的,我把各种算法套路框架总结出来,相信可以帮助其他人少走弯路**。我这个纯靠自学的小童鞋,花了一年时间刷题和总结,自己写了一份算法小抄,后面有目录,这里就不废话了。 ### 使用方法 -1、**先给本仓库点个 star,满足一下我的虚荣心**,文章质量绝对值你一个 star,给我一点继续写文的动力,感谢。 +1、**先给本仓库点个 star,满足一下我的虚荣心**,文章质量绝对值你一个 star。我还在继续创作,给我一点继续写文的动力,感谢。 -2、可以在我的 gitbook 上直接查看所有文章,会同步持续更新,建议收藏。地址:https://labuladong.gitbook.io/algo +2、可以在我的 gitbook 上直接查看所有文章,会和公众号同步持续更新文章,建议收藏。地址:https://labuladong.gitbook.io/algo -3、可以关注我的公众号 **labuladong**,我就是不喜欢转载乱七八糟的低质文章,**坚持原创,全是高质量原创,说是最良心最硬核的算法公众号都不为过**。 +3、可以关注我的公众号 **labuladong** 及时获取更新。我不喜欢转载乱七八糟的低质文章,**坚持高质量原创,说是最良心最硬核的技术公众号都不为过**。 这些文章就是从公众号里整理出来的,目前主要发文平台是微信公众号,公众号后台回复关键词【电子书】可以获得这份小抄的电子书版本,方便你做笔记: @@ -19,14 +27,14 @@ # 二、文章目录 * 第零章、必读系列 - * [学习算法和刷题的思路指南](算法思维系列/学习数据结构和算法的高效方法.md) + * [学习算法和刷题的框架思维](算法思维系列/学习数据结构和算法的高效方法.md) * [学习数据结构和算法读什么书](算法思维系列/为什么推荐算法4.md) - * [动态规划详解](动态规划系列/动态规划详解进阶.md) + * [动态规划解题框架](动态规划系列/动态规划详解进阶.md) * [动态规划答疑篇](动态规划系列/最优子结构.md) - * [回溯算法详解](算法思维系列/回溯算法详解修订版.md) - * [二分查找详解](算法思维系列/二分查找详解.md) - * [双指针技巧总结](算法思维系列/双指针技巧.md) - * [滑动窗口技巧](算法思维系列/滑动窗口技巧.md) + * [回溯算法解题框架](算法思维系列/回溯算法详解修订版.md) + * [二分查找解题框架](算法思维系列/二分查找详解.md) + * [滑动窗口解题框架](算法思维系列/滑动窗口技巧.md) + * [双指针技巧解题框架](算法思维系列/双指针技巧.md) * [Linux的进程、线程、文件描述符是什么](技术/linux进程.md) * [Git/SQL/正则表达式的在线练习平台](技术/在线练习平台.md) * 第一章、动态规划系列 diff --git "a/\346\212\200\346\234\257/linux\350\277\233\347\250\213.md" "b/\346\212\200\346\234\257/linux\350\277\233\347\250\213.md" index 5fba2419c0d1db348aff5302dcf54027ed5add7b..836e44cb8121f4b759c2c2eaf9d53c8f9b9a5e2a 100644 --- "a/\346\212\200\346\234\257/linux\350\277\233\347\250\213.md" +++ "b/\346\212\200\346\234\257/linux\350\277\233\347\250\213.md" @@ -65,16 +65,28 @@ PS:不要忘了,Linux 中一切都被抽象成文件,设备也是文件, 明白了这个原理,**输入重定向**就很好理解了,程序想读取数据的时候就会去`files[0]`读取,所以我们只要把`files[0]`指向一个文件,那么程序就会从这个文件中读取数据,而不是从键盘: -![](../pictures/linuxProcess/4.jpg) +```shell +$ command < file.txt +``` + +![](../pictures/linuxProcess/5.jpg) 同理,**输出重定向**就是把`files[1]`指向一个文件,那么程序的输出就不会写入到显示器,而是写入到这个文件中: -![](../pictures/linuxProcess/5.jpg) +```shell +$ command > file.txt +``` + +![](../pictures/linuxProcess/4.jpg) 错误重定向也是一样的,就不再赘述。 **管道符**其实也是异曲同工,把一个进程的输出流和另一个进程的输入流接起一条「管道」,数据就在其中传递,不得不说这种设计思想真的很优美: +```shell +$ cmd1 | cmd2 | cmd3 +``` + ![](../pictures/linuxProcess/6.jpg) 到这里,你可能也看出「Linux 中一切皆文件」设计思路的高明了,不管是设备、另一个进程、socket 套接字还是真正的文件,全部都可以读写,统一装进一个简单的`files`数组,进程通过简单的文件描述符访问相应资源,具体细节交于操作系统,有效解耦,优美高效。 diff --git "a/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" "b/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" index 7a83c53e181369a599bd5e5c8bed800ebf7550b4..2143acd79d9de762d1e4bd29fe17e43d10b95815 100644 --- "a/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" +++ "b/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" @@ -1,6 +1,6 @@ # 二叉搜索树操作集锦 -通过之前的文章[框架思维](../算法思维系列/学习数据结构和算法的框架思维.md),二叉树的遍历框架应该已经印到你的脑子里了,这篇文章就来实操一下,看看框架思维是怎么灵活运用,秒杀一切二叉树问题的。 +通过之前的文章[框架思维](../算法思维系列/学习数据结构和算法的高效方法.md),二叉树的遍历框架应该已经印到你的脑子里了,这篇文章就来实操一下,看看框架思维是怎么灵活运用,秒杀一切二叉树问题的。 二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。