GitHub 68.8k star的硬核算法教程

共 766字,需浏览 2分钟

 ·

2021-01-29 18:36

上周末一时兴起做了半个小时的视频号直播,没有准备,没有主题,就是跟大家随性的聊了一会,整体感觉比做自己去视频要轻松很多。

今晚9:30再来一次视频号直播,这次我稍作了一下准备,主题是“读书&写作”,到时欢迎大家来捧场。另外也准备了小礼物,就是下面要介绍的这本算法小抄,这个教程在GiHub将近70k的关注。

这次一共送10本,中奖率很多比在公众号高很多,毕竟视频号直播不会比看公众号的人多。

一张图了解这本书的主要内容
作者是付东来,是微信公众号labuladong的作者,江湖人称Offer收割机,有着多年的刷题经验

书有一点和其他的书不太一样,书中并没有统一编程语言,而是混用了三种最常用的编程语言:Python、C++ 和 Java。


这么做主要是考虑到刷算法题是在养成一种思维模式,不应该局限于具体的编程语言。每一种语言都有缺点,我们到底选择用哪一种语言来解某道题目的根本依据是,解法的思路是否可以避开隐晦的语言特性,做到清晰易懂。

不用担心有的语言你不熟悉,算法根本用不到编程语言层面的技巧,本书会秉持最小化语言特性的原则,只会介绍本书中用到的数据结构和对应的 API,只要你学过任何一门编程语言,很容易就能明白。

例如在“动态规划解题套路框架”章节中,会讲到凑零钱问题,暴力解法就是遍历一棵 N 叉树:
1def coinChange(coins: List[int], amount: int):
2
3    def dp(n):
4        if n == 0return 0
5        if n < 0return -1
6
7        res = float('INF')
8        for coin in coins:
9            subproblem = dp(n - coin)
10            # 子问题无解,跳过
11            if subproblem == -1continue
12            res = min(res, 1 + subproblem)
13        return res if res != float('INF'else -1
14
15    return dp(amount)

这么多代码看不懂怎么办?直接提取框架,这样就能看出核心思路了
1def dp(n):
2    for coin in coins:
3        dp(n - coin)


欢迎大家关注下我的视频号


浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报