
动态规划
文章平均质量分 68
山鸡哥w
目的虽有却无路可循,我们称之为路的,无非是踌躇
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划——跳台阶爬楼梯问题
跳台阶问题是最简单的动态规划题目 *来源:leetcode、剑指offer都有 一只青蛙跳到一个n层台阶的顶端, 每次可以跳1 或 2 个台阶。你有多少种不同的方法可以跳到台阶顶端? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 3. 1 阶 + 1 阶 + 1 阶 4. 1 阶 + 2 阶 5. 2 阶 + 1 阶 根据题意分析可以知道,原创 2020-08-01 01:01:05 · 745 阅读 · 0 评论 -
动态规划——数对之差的最大值
题目描述: 给定一个数组,数组中的一个数减去它右边的子数组中的某个数得到一个差值 diff , 求所有可能的差值中最大的差值diffMax。 首先想到最简单的方法是暴力方法,即从第一个元素开始,遍历第一个元素后面的所有元素, 得出最大差值 diff,再从第二个元素开始 重复操作,最终得出最大差值 diffMax,时间复杂度为 n*n. 具体代码: public static int原创 2017-05-02 20:43:22 · 1482 阅读 · 0 评论 -
动态规划典型例题--连续子数组的最大和
题目描述:给定一个数组arr,数组中的元素有整数也有负数,数组中的一个或者连续多个数组成一个子数组。 求所有子数组里面的最大和。例如现在有数组 {1 , -2 , 3 , 10 , -4 , 7 , 2 , -5 }。 思路: 1.用暴力的方法,找出所有可能的子数组,然后找和最大的那个。这是可行的,但是时间复杂度为 n*n,显然是不够理想的。 2.动态规划思想。状态方程 : max原创 2017-05-24 19:27:09 · 16418 阅读 · 1 评论 -
动态规划--最长公共子序列和公共子串
一开始以为最长公共子序列就是最长公共子串,然而并不是。 子串,在位置上必须是连续的,但是子序列却不用。子序列是不改变原有字符的顺序,去掉其中的一些字符得到的序列,比如 aabbccdef,那么abcdef 是它的一个子序列。 再比如我们现在字符串 abcdef 和 abcedf ,最长公共子串明显是 abc,但是最长的公共子序列是 abcef 。 一个长度为 n 为的字符原创 2017-05-30 00:40:57 · 314 阅读 · 0 评论 -
最长不含重复字符的子字符串
题目:输入一个字符串,找出字符串中最长的不含重复字符的子字符串,计算该子字符串的长度。假设字符串中的字符为“a~z”,例如 arabcacfr ,最长的字符串为 rabc 和 acfr ,长度为 4 。————源自《剑指0ffer》 思路:采用暴力的方法,时间复杂度高度 n^3 ,显然是不可取的。 本题应该采用动态规划的方法来解决,时间复杂度只需要 n ,以及一个辅助的数组即可。 我原创 2017-06-04 18:07:15 · 1887 阅读 · 0 评论 -
动态规划--矩阵最小的路径和
题目描述:给定一个 N*M 的矩阵arr,从左上角开始每次只能向下或者向右走,最后到达右下角。路径上所有点的数字和为 路径和,求最小的路径和。 典型的动态规划。状态方程为: dp[i][j] = getMin( dp[i - 1][j] ,dp[i][j - 1] ) + arr[i][i] 。dp[i][j] 表示 达到点 arr[i][j] 是的最小路径和,因为每次只能向下或者向右,所以要达原创 2017-05-27 20:03:39 · 6994 阅读 · 0 评论