14 天前 / 噶牛爱尚
首发于面经详解写文章经典动态规划问题:高楼扔鸡蛋labuladong爱玩编程,算法。公众号:labuladong605 人赞同了该文章今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼。国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡蛋太浪费,改成扔杯子,扔破碗什么的。 具体的问题等会再说,但是这道题的解法技巧很多,光动态规划就好几种效率不同的思路,最后还有一种极其高效数学解法。秉承咱们号一贯的作风,拒绝奇技淫巧,拒绝过于诡异的技巧,因为这些技巧无法举一反三,学了......
17 天前 / 高飞
点击蓝色“五分钟学算法”关注我哟 加个“星标”,天天中午 12:15,一起学算法 这些问题大多在 LeetCode 上面标的都是 hard 难度,弄清楚了这些套路后,回过头去看看推导过程,然后再看看二、三十行的代码量,不知道是否能给你一些新的感悟和认识? 本文全长 1w 字,内容有点干,建议先收藏再阅读! 概论前面我们说了矩阵类动态规划和序列类动态规划这两类动规题型,不知道你是否对动态规划有了更多的认识。 这里说一下,将动态规划分不同的题型来讨论主要为了更好地明确思路,往往不同类型的题目有着不同的切题点,当然你熟练了......
21 天前 / 噶牛爱尚
首发于java工程师之路写文章告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我(万字长文)帅地公众号「苦逼的码农」,求关注,专注于创作 | 编程 |算法2,721 人赞同了该文章动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递......
38 天前 / 噶牛爱尚
首发于C++学习之路写文章算法面试必修课,动态规划基础题型归纳(一)Coolwriter码农,数码,汽车,鬼畜31 人赞同了该文章一、前言动态规划(Dynamic Programming,简称DP),虽然抽象后进行求解的思路并不复杂,但具体的形式千差万别,找出问题的子结构以及通过子结构重新构造最优解的过程很难统一,并不像回溯法具有解决绝大多数问题的银弹。 随着计算机从业与求职者的增加,并伴随大家都是“有备而来”的情况下,一般简单的反转链表之类的题目已经无法再在面试中坚挺了。因此在求职者人数与招聘名额的比例较大的情况下,公司会倾向于出更难的面......
78 天前 / death00
最近在刷力扣上的题目,刷到了65不同路径,当初上大学的时候,曾在hihocoder上刷到过这道题目,但是现在已经几乎全忘光了,大概的知识点是动态规划,如今就让我们一起来回顾一下。 从题目说起题目原文是: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 说明:m 和 n 的值均不超过 100。 示例 1: 输入: m = 3, n = 2......
190 天前 / y277an
动态规划算法一直是面试手撕算法中比较有挑战的一种类型。很多的分配问题或者调度问题实际上都可能用动态规划进行解决。(当然,如果问题的规模较大,有时候会抽象模型使用动归来解决,有时候则可以通过不断迭代的概率算法解决查找次优解) 所以,动归很重要,至少算法思想很重要。 什么是动态规划?通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。 最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。 重叠子问题:在用递归算法自顶向......
210 天前 / 算法与编程之美微信
通过欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 深入理解动态规划算法 - 凑硬币 深入理解动态规划算法 - 爬楼梯 深入理解动态规划算法 - 凑整数 前面三篇文章已经为大家介绍了利用动态规划算法解决问题的思路以及相关的代码实现,最为核心的就是第一步利用数学中函数的思想来建立模型,然后求解问题。这三个问题构建的数学函数都有一个共同的特征就是所构建的函数都是一元函数即y = f(x)。 如凑硬币的问题“面值为1元、3元、5元的硬币若干,如何......
215 天前 / 算法与编程之美微信
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 问题描述 给定正整数n,找出所有不同的写法使得n为整数1,3,4的和。 如:n=5时,不同的写法有5种。 解决方案 下面将介绍利用动态规划的思路来解决问题。 1、 将问题求解转化为函数形式。 从初中开始我们就接触了函数的概念,所谓函数指的就是给定自变量x,根据某种映射规则进行运算后,会得到一个值y。 举个简单的例子来说明,y=2·x就是一种映射关系,如给定x=2,进行运算后可以得到y=2·2=4。 而......
217 天前 / 算法与编程之美微信
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 动态规划(Dynamic Programming)算法是计算机科学科学领域中最重要也是最常用的一个算法,巧妙的利用它可以解决很多复杂的问题,而且该算法也频繁的出现在各大互联网公司的面试中,因此掌握它是十分必要的。 但该算法对于初学者来说理解并掌握并非易事,本系列教程将带领大家一起来学习该算法,通过经典的案列介绍和问题分析以及python代码实现,帮助大家彻底理解动态规划。 问题描述 首先我们来看一道非常经典......
223 天前 / 噶牛爱尚
首发于算法coding那些事儿写文章算法分析与设计之动态规划yyHaker因为相信,所以坚持3 人赞同了该文章动态规划同样是一种将问题分解为求解子问题的方法,不过与分治不同的是,动态规划算法的子问题不是相互独立的,而是有公共的部分,即有重叠子问题,这个时候使用分治算法,将会重复计算公共的子问题,效率很低!而用某种方法将中间计算的结果保存下来,以供后面直接使用,将会大大提高效率,体现了一种“用空间换时间的”思想! 那么什么样的问题才可以使用动态规划方法呢?有两个条件: 动态规划算法的设计步骤: 接下来,将通过几个例子来体......
264 天前 / 噶牛爱尚
0. intro很有意思的问题。以往见过许多教材,对动态规划(DP)的引入属于“奉天承运,皇帝诏曰”式:不给出一点引入,见面即拿出一大堆公式吓人;学生则死啃书本,然后突然顿悟。针对入门者的教材不应该是这样的。恰好我给入门者讲过四次DP入门,迭代出了一套比较靠谱的教学方法,所以今天跑过来献丑。 现在,我们试着自己来一步步“重新发明”DP。 1. 从一个生活问题谈起先来看看生活中经常遇到的事吧——假设您是个土豪,身上带了足够的1、5、10、20、50、100元面值的钞票。现在您的目标是凑出某个金额w,需要用到尽量少的钞票。 依据生活经验......
293 天前 / 超人汪小建
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 最长公共子序列最长公共子序列,英文为Longest Common Subsequence,缩写LCS。一个序列,如果是某两个或多个已知序列的最长子序列,则称为最长公共子序列。 另外,要注意的是最长公共子序列与最长公共子串不一样,下面看一个例子就明白。 有序列S1和S2,其中S1=hello,S2=hero。那么最长公共子序列为heo,而最长公共子串为he。可以看到区......
398 天前 / 超人汪小建
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 Floyd算法Floyd是一种经典的多源最短路径算法,它通过动态规划的思想来寻找给定加权图中的多源点之间的最短路径,算法时间复杂度是O(n3)。之所以叫Floyd是因为该算法发明人之一是Robert Floyd,他是1978年图灵奖获得者,同时也是斯坦福大学计算机科学系教授。 image核心思想对于n个点的加权图,从加权图的权值矩阵开始,递归地更新n次最终......
552 天前 / 超人汪小建
前言 目前计算句子相似性有很多不同的方案,比如基于语义词典的方法、基于相同词汇的方法、基于统计的方法和基于编辑距离的方法。这篇文章先介绍编辑距离的基础。编辑距离 编辑距离其实就是指把一个字符串转换为另外一个字符串所需要的最小编辑操作的代价数。包括插入字符、替换字符和删除字符。编辑距离越小,相似度越大。比如我们要将what转换成where,可能是将 a -> ...