
动态规划
逝水一战
重剑无锋,大巧不工
展开
-
分割等和子集 (递归 二维dp 一维dp)
问题描述:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-equal-subset-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。大体思路:由于想将数组分割为两个和相同的子集,因此可以先获得数组整体的和,然后该问题可以转化为找数组中是否存在某几个元素之和等于总和的一半。注:若总和为奇数则可以直接返原创 2020-06-15 10:55:18 · 340 阅读 · 0 评论 -
股票交易问题全拿下,一扫光
上来直接最难的,后面都是毛毛雨。问题一:买卖股票的最佳时机IV(leetcode188)问题描述:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv著作权归领.原创 2020-06-11 20:11:34 · 609 阅读 · 0 评论 -
打家劫舍
问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。...原创 2020-05-29 08:46:45 · 529 阅读 · 0 评论 -
单词拆分
问题描述:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。拆分时可以重复使用字典中的单词。 可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。来源:力扣(LeetCode)链接:https://lee...原创 2020-05-26 14:25:36 · 485 阅读 · 0 评论 -
0/1背包与完全背包
背包问题描述:假设有一个固定容量的背包,然后有许多具有价值属性和重量属性的物品,要求在不超过背包最大容量的基础上装的物品的总价值最大。假设共有N个物品,背包的容量为M,物品 i 的价值与重量分别为 value[i] 和 weight[i]。dp[i][j] 为可选物品为一到i,背包空间为j时的最大价值。0/1背包0/1背包为最基础的背包问题,顾名思义,所有的物品只有一件,只有拿或不拿两种选择,dp[i][j]的表达式如下:最大价值为选i物品和不选i物品的最大值。实现代码如下:原创 2020-05-22 19:04:46 · 371 阅读 · 0 评论 -
子数组和问题II
本次的两个算法题是子数组的积的问题,勉强也能算做子数组和的问题。问题一:乘积小于k的子数组问题描述:给定一正整数数组以及一整数k,要求找到所有乘积小于k的子数组的个数。input : nums = [3 5 2 8] k = 17output: 7 解释: [3] [5] [2] [8] [3 5] [5 2] [2 8]解法一:前缀和 + 二分搜索看到题的第一反应还是用前缀和数组求解。但是由于是乘积可能会出现越界情况,因此对num求对数。此时的乘法就变为了加法。因...原创 2020-05-17 10:44:13 · 218 阅读 · 0 评论 -
跳跃游戏
问题描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。..原创 2020-05-11 14:10:44 · 374 阅读 · 0 评论 -
n个骰子的点数
题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例2:输入: 2输出: [0...原创 2020-03-12 13:28:58 · 254 阅读 · 0 评论