动态规划
文章平均质量分 80
yang20141109
这个作者很懒,什么都没留下…
展开
-
Container With Most Water (容器中盛最多的水)
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two原创 2016-04-26 20:10:18 · 424 阅读 · 0 评论 -
数组中取出下标不连续的任意个数,求取出的数的和的最大值
给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。 解析:典型的动态规划思想,设置一个辅助数组,大小和原数组的大小一样,辅助数组中值表示从原数组起始位置开始到当前下标位置截止的和最大值。比如原创 2016-04-16 20:41:54 · 4420 阅读 · 0 评论 -
leetcode(198,213)House Robber(I,II)
题目一: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adja原创 2016-05-26 20:27:20 · 255 阅读 · 0 评论 -
矩阵中从左上角到右下角最短路径(五种方法)
题目:给定一个n*m的矩阵,矩阵中元素非负,从左上角到右下角找一条路径,使得路径上元素之和最小,每次只能向右或者向下走一个方格。如下图所示:最短路径是图中绿色部分的元素。 方法一(转换为图中的最短路径):我们可以把矩阵中的每个方格当做图中的一个顶点,相邻的方格之间有一条边,每个方格最多有两条出边,(当前方格到右侧方格有一条出边,当前方格到下侧方格有一条出边)。我们把矩阵中的最短路径转原创 2016-05-30 21:36:21 · 29561 阅读 · 2 评论 -
矩阵中从左上角到右下角的路径条数
题目:给定一个n*m矩阵,求从左上角到右下角总共存在多少条路径,每次只能向右走或者向下走。解法一:和上一篇文章的思想相似,在此不再重复叙述。int uniquePaths(int m, int n) { if (m <= 0 || n <= 0) return 0; vector data(n,1); int cur = 0; for(int i = 1; i < m; ++i)原创 2016-05-31 11:53:38 · 10924 阅读 · 0 评论 -
动态规划之最长递增子序列
题目一:给定一个长度为N的数组,找出一个最长的单调递增子序列(不一定连续,但是顺序不能乱)。并返回单调递增子序列的长度。 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},我们返回其长度6。 题目二:在题目一的基础上,我们要返回该子序列中的元素。例如,给定一个长度为8的数组A{1,3,5,2,4,6,7,8}原创 2016-05-08 17:12:24 · 766 阅读 · 0 评论 -
连续子数组的最大乘积
题目:给定一个数组,求出这个数组中连续子数组的最大乘积,例如{2,3,-4,5},最大乘积为2*3=6。 解析:动态规划思想,保存两个临时变量maxProduct和minProduct,这两个临时变量分别存储,以当前位置结尾的连续子数组的最大乘积和最小乘积。int maxProduct(vector& nums) { int maxRes = nums[0]; int maxPro原创 2016-06-29 12:09:11 · 783 阅读 · 0 评论