随笔分类 - 动态规划
摘要:给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。 示例 1: 输入:n = 2 输出:[0,1,1] 解释:0 --> 0 1 --> 1 2 --> 10 示例 2: 输入:n = 5 输出:
阅读全文
摘要:题目描述: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 /** * 解题思路: * 第一步:确定dp数组,本题定义一个二维dp数组,那么dp[i][j]表示为在(i,j)位置,由(0,0)
阅读全文
摘要:方法 1:暴力算法最简单的实现方法是用递归和回溯。为了找到解,我们可以检查字典单词中每一个单词的可能前缀,如果在字典中出现过,那么去掉这个前缀后剩余部分回归调用。同时,如果某次函数调用中发现整个字符串都已经被拆分且在字典中出现过了,函数就返回 true 。 方法 2:记忆化回溯算法 在先前的方法中,
阅读全文
摘要:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2: 输入: "cbbd"输出: "bb" 思路: 中心扩散法的想法很简单:遍历每一个索引,以这个索引为中心,利用
阅读全文
摘要:问题描述:小Q正在攀爬一座宝塔,这座宝塔很特别,塔总共有n层,但是两层之间的净高却不相同,所以造成小Q爬过每层的时间也不同。如果某一次高度为x,那么爬过这一层所需时间也就是x。小Q还会使用一种魔法,每使用一次可以让他向上跳1层或者两层,但是每次调后, 必须至少爬一层才能接着使用魔法。小Q想用最短的时间上顶,希望你能告诉他n表示高度(n<=10000)x表示层差(1<=x<=100)问题分析: * ...
阅读全文
摘要:在LeetCode商店中, 有许多在售的物品。 然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。 现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。 每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼包的价格,其他数字分别表示
阅读全文
摘要:问题描述: 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。 返回获得利润的最大值。 示例 1:
阅读全文
摘要:题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 示例 2:
阅读全文
摘要:给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和。 示例 1: 示例 2: 注意: 0 < s1.length, s2.length <= 1000。 所有字符串中的字符ASCII值在[97, 122]之间 思想:典型的求字符串最优解问题,一般都是使用动态规划法。d
阅读全文
摘要:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 思想:从最底层向上找最短路径,下面给出两种解法,一维数组和二维数组两种解法,但是思想都是一样的。 一维数组解法: 二维数组
阅读全文
摘要:数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例
阅读全文
摘要:问题描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 示例 2: 示例 3:
阅读全文
摘要:问题描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例:
阅读全文
摘要:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 示例 2: 上面代码优化一下:可采用动态规划的方法去做,思想和暴力法一样,代码优化了 代码如
阅读全文
摘要:问题描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在
阅读全文
摘要:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 方法一: 用二维数组做,先定义一个二维数组arr,数组大小为所传参数的大小+1;然后从底向上遍历数组(按递推公式:arr[
阅读全文
摘要:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 问题分析:首先判断
阅读全文
摘要:示例 1:
阅读全文
摘要:示例 1: 示例 2: 递归法,数据如果大的话,重复计算的数据很多,导致编译器崩溃,一般不建议使用递归 下面我们来说用动态规划来如何解?
阅读全文