摘要: 后台天天有人问背包问题,这个问题其实不难啊,如果我们号动态规划系列的十几篇文章你都看过,借助框架,遇到背包问题可以说是手到擒来好吧。无非就是状态 + 选择,也没啥特别之处嘛。 今天就来说一下背包问题吧,就讨论最常说的 0 1 背包问题。描述: 给你一个可装载重量为 的背包和 个物品,每个物品有重量和 阅读全文
posted @ 2020-03-10 13:10 labuladong 阅读(2599) 评论(0) 推荐(1) 编辑
摘要: 今天讲讲 Union Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。 说起这个 Union Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!后 阅读全文
posted @ 2020-02-17 12:13 labuladong 阅读(2683) 评论(0) 推荐(1) 编辑
摘要: 先给大家讲个笑话乐呵一下: 有一天阿东到图书馆借了 N 本书,出图书馆的时候,警报响了,于是保安把阿东拦下,要检查一下哪本书没有登记出借。阿东正准备把每一本书在报警器下过一下,以找出引发警报的书,但是保安露出不屑的眼神:你连二分查找都不会吗?于是保安把书分成两堆,让第一堆过一下报警器,报警器响;于是 阅读全文
posted @ 2020-02-17 12:10 labuladong 阅读(4236) 评论(0) 推荐(2) 编辑
摘要: 我把双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。 一、快慢指针的常见算法 快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前,慢指针 slo 阅读全文
posted @ 2020-02-17 10:10 labuladong 阅读(820) 评论(0) 推荐(0) 编辑
摘要: 这是好久之前的一篇文章「学习数据结构和算法的框架思维」的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,教你如何使用框架思维。 首先,这里讲的都是普通的数据结构,咱不是搞算法竞赛的,野路子出生,我只会解决常规的问题。另外,以下是我个人的经验的总 阅读全文
posted @ 2020-02-17 10:08 labuladong 阅读(1882) 评论(0) 推荐(1) 编辑
摘要: 一、什么是 LRU 算法 就是一种缓存淘汰策略。 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢? LRU 缓存淘汰算法 阅读全文
posted @ 2020-02-17 10:07 labuladong 阅读(5279) 评论(0) 推荐(0) 编辑
摘要: 素数的定义看起来很简单,如果一个数如果只能被 1 和它本身整除,那么这个数就是素数。 不要觉得素数的定义简单,恐怕没多少人真的能把素数相关的算法写得高效。比如让你写这样一个函数: 你会如何写这个函数?我想大家应该会这样写: java int countPrimes(int n) { boolean[ 阅读全文
posted @ 2020-02-17 10:04 labuladong 阅读(1433) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是我们号半年前一篇 200 多赞赏的成名之作「动态规划详解」的进阶版。由于账号迁移的原因,旧文无法被搜索到,所以我润色了本文,并添加了更多干货内容,希望本文成为解决动态规划的一部「指导方针」。 再说句题外话,我们的公众号开号至今写了起码十几篇文章拆解动态规划问题,我都整理到了公众号菜单的「文 阅读全文
posted @ 2020-02-17 10:02 labuladong 阅读(8719) 评论(1) 推荐(3) 编辑
摘要: 本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道高难度的子字符串匹配问题。 LeetCode 上至少有 9 道题目可以用此方法高效解决。但是有几道是 VIP 题目,有几道题目虽不难但太复杂,所以本文只选择点赞最高,较为经典的,最能够讲明白的三道题来讲解。第一题为了让读者掌握算法模板,篇 阅读全文
posted @ 2020-02-17 09:54 labuladong 阅读(14442) 评论(0) 推荐(5) 编辑
摘要: 这篇文章是很久之前的一篇《回溯算法详解》的进阶版,之前那篇不够清楚,就不必看了,看这篇就行。把框架给你讲清楚,你会发现回溯算法问题都是一个套路。 废话不多说,直接上回溯算法框架。 解决一个回溯问题,实际上就是一个决策树的遍历过程 。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选 阅读全文
posted @ 2020-02-17 09:53 labuladong 阅读(10937) 评论(0) 推荐(1) 编辑
摘要: 咱们的公众号有很多硬核的算法文章,今天就聊点轻松的,就具体聊聊我非常“鼓吹”的《算法4》。这本书我在之前的文章多次推荐过,但是没有具体的介绍,今天就来正式介绍一下。。 我的推荐不会直接甩一大堆书目,而是会联系实际生活,讲一些书中有趣有用的知识,无论你最后会不会去看这本书,本文都会给你带来一些收获。 阅读全文
posted @ 2020-02-17 09:49 labuladong 阅读(4639) 评论(0) 推荐(1) 编辑
摘要: 今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼。国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡蛋太浪费,改成扔杯子,扔破碗什么的。 具体的问题等会再说,但是这道题的解法技巧很多,光动态规划就好几种效率不同的思路,最后还有一种极其高 阅读全文
posted @ 2020-02-17 09:40 labuladong 阅读(2022) 评论(0) 推荐(0) 编辑
摘要: 前几天看了一份鹅场的面试题,算法部分大半是动态规划,最后一题就是写一个计算编辑距离的函数,今天就专门写一篇文章来探讨一下这个问题。 我个人很喜欢编辑距离这个问题,因为它看起来十分困难,解法却出奇得简单漂亮,而且它是少有的比较实用的算法(是的,我承认很多算法问题都不太实用)。下面先来看下题目: 为什么 阅读全文
posted @ 2020-02-17 09:39 labuladong 阅读(2809) 评论(1) 推荐(1) 编辑
摘要: 本文首发:使用 chatGPT 高效学习的套路 最近这段时间 chatGPT 掀起了一阵 AI 热潮,目前来看网上大部分内容都是在调戏 AI,很少有人写如何用 chatGPT 做正事儿。 我作为一个大部分知识都是从搜索引擎和 GitHub 学来的程序员,第一次和 chatGPT 促膝长谈后,基本认定 阅读全文
posted @ 2023-03-04 11:19 labuladong 阅读(931) 评论(0) 推荐(1) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 Pulsar Function 允许你编写函数对 topic 中的数据进行一些处理,函数的输入就是一个或多个 topic 中的消息,函数的返回 阅读全文
posted @ 2023-02-08 14:01 labuladong 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 上一章介绍了 Pulsar Function 的使用,每个游戏房间都有对应的 score topic,每个玩家的得分都会被发送到 score 阅读全文
posted @ 2023-02-08 14:00 labuladong 阅读(71) 评论(0) 推荐(1) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 我推荐《数据密集型应用系统设计》这本书的第四章:编码与演化(在线阅读地址)。 编码(encoding)和演化(evolution)是两个不同的 阅读全文
posted @ 2023-02-08 14:00 labuladong 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 我选择了 Go 语言的一款 2D 游戏框架来制作这个炸弹人游戏,叫做 Ebitengine,官网如下: https://ebitengine. 阅读全文
posted @ 2023-02-08 13:56 labuladong 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 最详尽的部署方法参见官网: https://pulsar.apache.org/ 这里我介绍下 Pulsar 的架构原理,搞明白之后就能很容易 阅读全文
posted @ 2023-02-08 13:56 labuladong 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。 之前说了,每个游戏客户端包含一个 Pulsar 生产者和一个 Pulsar 消费者。 游戏中所有玩家动作都会被抽象成一个事件,游戏客户端会监听 阅读全文
posted @ 2023-02-08 13:53 labuladong 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 我之前写过一篇文章 我用消息队列做了个联机游戏 用 Pulsar 这款消息队列实现了一个比较简陋的炸弹人游戏,结果不少读者对这个小游戏都很感兴趣,甚至在 Pulsar 的技术交流群里都遇到了公众号的读者。 所以我决定给这个小游戏开发更多功能,并附上更详尽的文档说明,具体介绍一下这个游戏开发的思路,用 阅读全文
posted @ 2023-02-08 13:46 labuladong 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 本文首发:啊这,一道数组去重的算法题把东哥整不会了… 读完本文,你不仅学会了算法套路,还可以顺便解决如下题目: 316. 去除重复字母(中等) 1081. 不同字符的最小子序列(中等) 关于去重算法,应该没什么难度,往哈希集合里面塞不就行了么? 最多给你加点限制,问你怎么给有序数组原地去重,这个我们 阅读全文
posted @ 2023-01-23 23:14 labuladong 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 本文首发:谈谈游戏中的随机算法 读完本文,你不仅学会了算法套路,还可以顺便解决如下题目: 382. 链表随机节点 398. 随机数索引 384. 打乱数组 没事儿的时候我喜欢玩玩那些经典的 2D 网页小游戏,我发现很多游戏都要涉及地图的随机生成,比如扫雷游戏中雷的位置应该是随机分布的: 再比如经典炸 阅读全文
posted @ 2023-01-23 23:12 labuladong 阅读(675) 评论(0) 推荐(0) 编辑
我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。