一、定义 递归:程序调用自身,从顶部将问题分解,其问题与其子问题是同一概念。通过解决掉所有分解出来的小问题,来解决整个问题。 迭代:利用变量的原值推算出变量的下一个值。递归中一定有迭代,但是迭代中不一定有递归。 动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。 ...
分类:
其他好文 时间:
2021-05-24 00:46:45
阅读次数:
0
动态规划——剑指 Offer 42. 连续子数组的最大和 题目: 思路: dp数组的定义:dp[i]是以 nums[i] 结尾的最大子数组和。 base_case:dp[0] = nums[0] 状态转移方程:dp[i]有两种「选择」,要么与前面的相邻子数组连接,形成一个和更大的子数组;要么不与前面 ...
分类:
编程语言 时间:
2021-05-20 17:50:09
阅读次数:
0
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 分析:这里需要注意的是,是要找出字串,而不是子序列,字串是连续的,子序列可以不是连续的,若是要找的是子序列,那么就有些麻烦了,会用到动态规划 代码分析: class Solution { public int lengthOfLong ...
分类:
其他好文 时间:
2021-04-26 13:04:14
阅读次数:
0
/* * @lc app=leetcode.cn id=1143 lang=cpp * * [1143] 最长公共子序列 * * https://leetcode-cn.com/problems/longest-common-subsequence/description/ * * algorith ...
分类:
其他好文 时间:
2021-04-23 12:08:02
阅读次数:
0
1.线性DP 2.背包DP 0/1背包中的将二维化为一维,需要倒序遍历,当前状态仅由i-1层状态而来。 现在终于理解了,因为我们将i这一维给去掉了,我们我们遍历i这一层的时候,由大到小遍历,大的(正在更新的)就是我们的第i层,但是前面1~j-1却还保留在了第i-1层上(因为其尚未被遍历更新信息,所以 ...
分类:
其他好文 时间:
2021-04-16 12:06:18
阅读次数:
0
/** 硬币找零:三个硬币面值2,5,7,希望用最少的硬币数拼出27* 分析:用动态规划解* f[X]:最少的硬币拼出X,设最后一步用a拼出了27,a可以是2/5/7,那么* f[27]=f[27-a]+1,因为不知道a具体是多少,所以,f[27]=min{f[27-2]+1,f[27-5]+1,f ...
分类:
其他好文 时间:
2021-04-16 12:02:09
阅读次数:
0
丑数 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 方法1:最小堆,基于sort.IntSlice实现heap 方法2:动态规划 func nthUglyNumb ...
分类:
其他好文 时间:
2021-04-12 11:41:41
阅读次数:
0
思路: 首先是子序列,所以说并不一定要求是连续的序列满足摆动序列。同时题目要求的是最长摆动子序列的长度。 动态规划 那么我们可以考虑通过记录摆动的长度得到,什么是摆动的长度呢?我们可以用up和down两个变量来记录摆动的次数,如果前一个差为正数,当前差为负,那么就是遇到了一个down,模拟往下摆动。 ...
分类:
其他好文 时间:
2021-04-10 13:10:26
阅读次数:
0
概念 动态规划法离不开一个关键词,拆分 ,就是把求解的问题分解成若干个子阶段,前一问题的结果就是求解后一问题的子结构。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 适用性 适用动态规划的问题必须满 ...
分类:
其他好文 时间:
2021-04-07 11:14:18
阅读次数:
0
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划不是某一种具体的算法,而是一种算法思想: 若要解一个给定问题,我们需要解其不同部分(即子问题),再 ...
分类:
其他好文 时间:
2021-04-06 15:07:31
阅读次数:
0