动态规划再理解(53、121、174)

本次文档也是对动态规划的 再认识 。
之前写过一些文章,在处理动态规划问题的时候依据的思路是 :暴力搜索->加缓存->动态规划。相关文章有:算法八——动态规划,动态规划——0-1背包问题,动态规划——矩阵中的最短路径长度等等。
最近在看问题的时候发现,只要能明白暴力搜索是怎么搜索的,跟哪些条件有关系,不经过前面2个步骤也能写出动态规划方程。大家知道动态规划方程出来了,基本上问题就解决了。写下文章记录一下 。
如果看不出和哪些条件有关系,或者找不到动态转换关系,还是要依据步骤一步一步来。

1 53. Maximum Subarray

输入:int数组,有正有负
输出:找到所有子数组的和,返回其中最大的。
规则:子数组是一个连续的数组,至少包含一个元素。
例如:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

分析:对于任意一个元素nums[i],可以开启一个子序列{nums[i]},也可以追加在前一个数字子序列的后面{…nums[i-1],nums[i]}。
对于开启一个子序列的情况 ,子数组和=nums[i]。
对于追加的情况:目标是要求子数组和,所以只要之前以nums[i-1]为结尾的子数组的和+nums[i]即可。假设dp[i]=以nums[i]为结尾的子数组的最大的和。
最后结果在所有dp元素中查找最大值。

dp[i] = Math.max(nums[i],nums[i+dp[i-1]])

动归特征:与前一个元素相关;与以前一个元素为结尾的子数组最大和相关。
之后就是写代码了。

class Solution {public int maxSubArray(int[] nums) {int n = nums.length;int[] dp = new int[n];dp[0] = nums[0];int max = dp[0];for(int i=1;i<n;i++){dp[i] = Math.max(nums[i],dp[i-1]+nums[i]);max = Math.max(max,dp[i]);}return max;}
}

进一步空间优化,可以自己思考。

2 121. Best Time to Buy and Sell Stock

输入:int数组,表示每天的股价。
输出:最大的盈利
规则:只可以买一次,卖一次。只能先买后卖。
例子:
Input: [7,1,5,3,6,4]
Output: 5
Explanation: 在价格为1的时候买入,在价格为6的时候卖出。
分析:只能买卖一次,先买后卖,说明是要找max(price[j]−price[i]),j>imax(price[j]-price[i]),j>imax(price[j]price[i]),j>i。对于每一个j,只要找到min(price[i]),i=0,1...j−1min(price[i]),i=0,1...j-1min(price[i]),i=0,1...j1即可。

class Solution {public int maxProfit(int[] prices) {int maxProfit = 0;int minPrice = Integer.MAX_VALUE;for(int i=0;i<prices.length;i++){minPrice = Math.min(minPrice,prices[i]);maxProfit = Math.max(maxProfit,prices[i]-minPrice);}return maxProfit;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获得Web目录URL

获得Web目录URL string strRoot String.Format("http://{0}{1}",Request.Url.Host,Request.ApplicationPath);posted on 2004-07-02 18:05 浙林龙哥 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/huqingyu/archive/2004/07/02/20622.html

第七十九期:阿里程序员感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦

互联网的世界也是一座围城。有人挤破脑袋想要进去。而有人又觉得是被互联网的光鲜表象欺骗了忙着要出来&#xff0c;但最终&#xff0c;这些人都会离开。 作者&#xff1a;职场八卦 互联网的世界也是一座围城。有人挤破脑袋想要进去。而有人又觉得是被互联网的光鲜表象欺骗了…

树上倍增求LCA详解

LCA&#xff08;least common ancestors&#xff09;最近公共祖先 指的就是对于一棵有根树&#xff0c;若结点z既是x的祖先&#xff0c;也是y的祖先&#xff08;不要告诉我你不知道什么是祖先&#xff09;&#xff0c;那么z就是结点x和y的最近公共祖先。 定义到此。 那么怎么求…

[导入]画带阴影效果的文字

画带阴影效果的文字文章来源:http://blog.csdn.net/net_lover/archive/2004/07/06/35553.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2004/07/07/816094.html

174. Dungeon Game

文章目录1题目理解2 分析1题目理解 故事背景&#xff1a;恶魔把公主抓走了&#xff0c;关在地牢里面。骑士想要把公主救出来。初始化的时候&#xff0c;骑士有一个健康值init。 输入&#xff1a;int[][] dungeon表示地牢中魔鬼布局图。dungeon[i][j]>0&#xff0c;恶魔会提…

第八十期:初创公司5大Java服务困局,阿里工程师如何打破?

初创公司遇到的每一个问题都可能攸关生死。创业之初更应该总结行业的常见问题&#xff0c;对比方案寻找最优解。 作者&#xff1a;常意 初创公司遇到的每一个问题都可能攸关生死。创业之初更应该总结行业的常见问题&#xff0c;对比方案寻找最优解。阿里巴巴地图技术专家常意在…

关于某些人和某些事的断想

关于某些人和某些事的断想<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />人的一生总会碰到这样那样的一些人和一些事&#xff0c;偶然或必然。这些人、这些事或许在我们的心里荡起过些许的波澜&#xff1b;又或许只是一闪而过&…

第八十一期:Java性能优化:35个小细节,提升你的Java代码运行效率

如果项目着眼于尽快无BUG上线&#xff0c;那么此时可以抓大放小&#xff0c;代码的细节可以不精打细磨&#xff1b;但是如果有足够的时间开发、维护代码&#xff0c;这时候就必须考虑每个可以优化的细节了&#xff0c;一个一个细小的优化点累积起来&#xff0c;对于代码的运行效…

Python数据类型与运算符号

一&#xff1a;数据类型 【1】为什么要有数据类型 &#xff08;1&#xff09;不同的数据含有不同的特征 例如&#xff1a;有文本数据 音频数据 视频数据 &#xff08;2&#xff09;不同的特征需要有不同的类型用来描述 二&#xff1a;数据类型的分类 【1】 &#xff08;1&#…

85. Maximal Rectangle

用dp计算矩形面积 文章目录1题目理解2分析2.1 暴力搜索2.2 动态规划3 相关题目1题目理解 输入&#xff1a;char[][] matrix 是一个二维数组&#xff0c;值由0和1组成。 输出&#xff1a;一个矩形的面积&#xff0c;这个矩形只包含1。 例子&#xff1a; Input: [ [“1”,“0”,…

全面搞定jive3.1.1

全面搞定jive3.1.1yippit 原创 (参与分&#xff1a;351&#xff0c;专家分&#xff1a;1740) 发表&#xff1a;2003-9-13 下午8:33 版本&#xff1a;1.0 阅读&#xff1a;8316次 近日坛子里面很多人问起这个问题&#xff0c;要么中文显示乱码出错&#xff0c;要么不能数…

spring mvc学习(6):springMVC的常见注解

1RequestMapping的位置可以在类名或者方法名之前 或者同时加在两个位置 最终的路径是两个位置路径的组合 value是默认的名称&#xff0c;可以省略&#xff0c;如果有其他参数&#xff0c;就不能省略 如下配置的访问路径&#xff1a;协议://主机&#xff1a;//端口/虚拟路径…

powershell some check

// TODO 待处理 1 # powershell 编写的某些校验2 3 function listChecks() {4 write-host 可用的校验;5 write-host CRC - 循环冗余校验;6 return -- done;7 }8 9 # 字节数组 CRC, 不知道是不是符合CRC定义 10 function crcCheck($byteArray) { 11 if ($byteAr…

801. Minimum Swaps To Make Sequences Increasing

文章目录1题目理解2 暴力搜索3 动态规划3.1第一种情况3.2第二种情况1题目理解 输入&#xff1a;两个int数组A和B&#xff0c;长度都不为0&#xff0c;并且长度相同。 输出&#xff1a;最小交换次数。 规则&#xff1a;最终想要得到两个严格递增的数组。如果原始数组不符合要求…

用属性还是字段?

用属性还是字段&#xff1f; 我觉得对于实体类(没有方法的类)&#xff0c;只要用字段就好了&#xff0c;没必弄得像下面这个样子&#xff1a; private AttributeConfig m_ColumnMap;public AttributeConfig ColumnMap{get{return m_ColumnMap;}set{m_ColumnMapvalue;}}posted …

spring mvc学习(7):springmvc学习笔记(常用注解)

1. Controller Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用Controller注解定义的控制器有如下特点: 不需要继承任何类, 也不需要实现任何接口可以处理多个请求可以使用Servlet的相关特性 spring自动扫描所有基于注解的类, 并将其注册为spring…

模板——树状数组求逆序对

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P1908 1 #include <map>2 #include <set>3 #include <cmath>4 #include <queue>5 #include <string>6 #include <cstdio>7 #include <cstring>8 #include <iostream&…

818. Race Car

文章目录1 题目理解2 BFS3 dp3.1 基本情况3.2 递归方程分析3.2.1 先超过target再调头3.2.2 不超过target4 说明1 题目理解 先讲规则。一辆小汽车停在位置0&#xff0c;并且方向朝向右侧&#xff0c;并且速度为1。小汽车每次可以选择加速A&#xff0c;那加速一次&#xff0c;新…

spring mvc学习(8):springmvc常用注解代码

目录结构 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:schemaLocation"http://java.sun.com/xml…

找了好久的BUG

找了好久的BUG <rsp:WEBPAGE id"PageContainer" TabSectionID"*****" runat"server"></rsp:WEBPAGE> <rsp:PLACEHOLDER id"AdminPage_Title" runat"server">公文流转流程工作点定义</rsp:PLACEHOLDER&…