动态规划
文章平均质量分 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 · 689 阅读 · 0 评论 -
动态规划——数对之差的最大值
题目描述:给定一个数组,数组中的一个数减去它右边的子数组中的某个数得到一个差值 diff ,求所有可能的差值中最大的差值diffMax。首先想到最简单的方法是暴力方法,即从第一个元素开始,遍历第一个元素后面的所有元素,得出最大差值 diff,再从第二个元素开始 重复操作,最终得出最大差值 diffMax,时间复杂度为 n*n.具体代码: public static int原创 2017-05-02 20:43:22 · 1413 阅读 · 0 评论 -
动态规划典型例题--连续子数组的最大和
题目描述:给定一个数组arr,数组中的元素有整数也有负数,数组中的一个或者连续多个数组成一个子数组。求所有子数组里面的最大和。例如现在有数组 {1 , -2 , 3 , 10 , -4 , 7 , 2 , -5 }。思路:1.用暴力的方法,找出所有可能的子数组,然后找和最大的那个。这是可行的,但是时间复杂度为 n*n,显然是不够理想的。2.动态规划思想。状态方程 : max原创 2017-05-24 19:27:09 · 16283 阅读 · 1 评论 -
动态规划--最长公共子序列和公共子串
一开始以为最长公共子序列就是最长公共子串,然而并不是。子串,在位置上必须是连续的,但是子序列却不用。子序列是不改变原有字符的顺序,去掉其中的一些字符得到的序列,比如 aabbccdef,那么abcdef 是它的一个子序列。再比如我们现在字符串 abcdef 和 abcedf ,最长公共子串明显是 abc,但是最长的公共子序列是 abcef 。一个长度为 n 为的字符原创 2017-05-30 00:40:57 · 286 阅读 · 0 评论 -
最长不含重复字符的子字符串
题目:输入一个字符串,找出字符串中最长的不含重复字符的子字符串,计算该子字符串的长度。假设字符串中的字符为“a~z”,例如 arabcacfr ,最长的字符串为 rabc 和 acfr ,长度为 4 。————源自《剑指0ffer》思路:采用暴力的方法,时间复杂度高度 n^3 ,显然是不可取的。本题应该采用动态规划的方法来解决,时间复杂度只需要 n ,以及一个辅助的数组即可。我原创 2017-06-04 18:07:15 · 1849 阅读 · 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 · 6883 阅读 · 0 评论