当前位置: 首页 > wzjs >正文

东莞外贸企业网站建设网站排名优化怎么做

东莞外贸企业网站建设,网站排名优化怎么做,什么软件可以做企业网站,中国制造网的网络营销方式一、121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 代码随想录 1. 解题思路 (1)定义dp数组含义:dp[i][0]表示持有这支股票得到的最大现…

一、121. 买卖股票的最佳时机

121. 买卖股票的最佳时机

视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili

代码随想录

1. 解题思路

(1)定义dp数组含义:dp[i][0]表示持有这支股票得到的最大现金,dp[i][1]表示不持有这支股票得到的最大现金(注意:并不是在该天有将股票卖出的行为,而仅仅表示一个状态,有可能股票在前几天已经卖出去了)。

(2) 递推公式:

        首先分析如何推出dp[i][0],dp[i][0]表示持有这支股票得到的最大现金,所以它的状态有两种,一种是前一天持有这支股票然后今天依然保持持有状态,另一种是之前一直没有购买而今天买入这只股票,所以dp[i][0] = max(dp[i-1][0], 0-prices[i]);

        其次分析dp[i][1],表示不持有这支股票得到的最大现金,依旧是两种状态,一种是前一天不持有这支股票然后今天依然保持不持有状态,另一种是在第i天卖出这只股票,所以dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i])。

(3)dp数组初始化:dp[0][0]第0天持有股票的最大现金,那么就是买入这只股票,即-prices[0];dp[0][1]第0天不持有股票的最大现金为0。

(4)遍历顺序:从前向后遍历,因为依赖于前面的状态。

(5)打印dp数组。

2. 代码实现

class Solution:def maxProfit(self, prices: List[int]) -> int:length = len(prices)if length == 0:return 0dp = [[0]*2 for _ in range(length)]dp[0][0] = -prices[0]dp[0][1] = 0for i in range(1, length):dp[i][0] = max(dp[i-1][0], -prices[i])dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i])return dp[-1][1]

二、122.买卖股票的最佳时机II

122.买卖股票的最佳时机II

视频讲解:动态规划,股票问题第二弹 | LeetCode:122.买卖股票的最佳时机II_哔哩哔哩_bilibili

代码随想录

1. 与 I 的区别

        本题可以买卖多次,而I只可以买卖一次,差异仅仅是在买入股票时不再是-pirces[i],初始金额并不是0-prices[i],而是dp[i-1]-prices[i]。

2. 代码实现

class Solution:def maxProfit(self, prices: List[int]) -> int:length = len(prices)if length == 0:return 0dp = [[0]*2 for _ in range(length)]dp[0][0] = -prices[0]dp[0][1] = 0for i in range(1, length):dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i])dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i])return dp[-1][1]

三、123.买卖股票的最佳时机III

这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。

视频讲解:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili

代码随想录

1. 解题思路

本题与Ⅰ、Ⅱ的区别:至多买卖两次收获的最大利润是多少。

(1)dp数组的含义:写出所有的状态,dp[i][0]表示不操作,dp[i][1]表示第一次持有,dp[i][2]表示第一次不持有(卖出),dp[i][3]表示第二次持有,dp[i][4]表示第二次不持有。

(2)递推公式:

        dp[i][0]是不操作,那么就是前一天状态推导得到的,所以dp[i][0] = dp[i-1][0];

        dp[i][1]表示第一次持有,既可以延续前一天买入的状态,也可以表示第i天买入,所以dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i]);

        dp[i][2]表示第一次不持有(卖出),延续前一天不持有的状态,也可以第i天卖出,所以dp[i][2] = max(dp[i-1][2], dp[i-1][1]+prices[i]);

        dp[i][3]表示第二次持有,既可以是前一天持有,也可以是前一天不持有但今天买入,所以dp[i][3] = max(dp[i-1][3], dp[i-1][2]+prices[i]);

        dp[i][4]表示第二次不持有,既可以延续前一天不持有,也可以第i天卖出,所以dp[i][4] = max(dp[i-1][4], dp[i-1][3]+prices[i])。

(3)dp数组初始化:

        dp[0][0]不操作,那么初始化为0;dp[i][1]为-prices[0];dp[0][2]表示第一次不持有(卖出),那么也就是第0天买入并且第0天卖出,所以初始化为0;dp[0][3]=-prices[0];dp[0][4] = 0。

(4)遍历顺序:从小到大遍历。

(5)打印dp数组。

2. 代码实现

class Solution:def maxProfit(self, prices: List[int]) -> int:length = len(prices)if length == 0:return 0dp = [[0]*5 for _ in range(length)]dp[0][0] = 0dp[0][1] = -prices[0]dp[0][2] = 0dp[0][3] = -prices[0]dp[0][4] = 0for i in range(1, length):dp[i][0] = dp[i-1][0]dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i])dp[i][2] = max(dp[i-1][2], dp[i-1][1]+prices[i])dp[i][3] = max(dp[i-1][3], dp[i-1][2]-prices[i])dp[i][4] = max(dp[i-1][4], dp[i-1][3]+prices[i])return dp[-1][4]

http://www.dtcms.com/wzjs/178058.html

相关文章:

  • 那曲做网站百度搜索大数据
  • 有没有接做网站私活的平台会计培训班多少钱
  • 请别人做网站注意事项广州网络营销产品代理
  • 西部数码网站管理助手ftp东莞网站建设方案外包
  • 闵行虹桥网站建设seo整站优化报价
  • 怎么查看一个网站是不是伪静态web设计一个简单网页
  • angularjs做的网站有哪些全网软文推广
  • 国产软件开发平台标题优化方法
  • hao123网站难做吗百度seo软件是做什么的
  • 网站banner尺寸大小阜新网络推广
  • 给国外做网站网上怎么推销自己的产品
  • 江门云建站模板免费网站收录网站推广
  • 网站做转链接违反版权吗惠州企业网站seo
  • 400电话单页网站百度推广登录入口官网网址
  • c mvc 网站开发进阶之路西安自动seo
  • 模板建站是什么意思优化关键词怎么做
  • 个人网站开发流程上海关键词推广公司
  • 江西网站开发的公司百度广告平台电话
  • 如何区分网站开发语言精准获客
  • 滨海企业做网站多少钱网站关键词排名快速提升
  • 私服充值网站怎么做的宁波网站推广大全
  • 宝塔如何添加ip域名做网站seo是什么技术
  • 微信公众平台登录入口官网seo营销推广多少钱
  • 人事处网站建设绩效目标概述企业网站快速排名
  • 推荐几个的网站网上的推广公司
  • 织梦cms网站模板修改全媒体运营师报名入口
  • 网站主机注册舟山seo
  • 网站点击滚动图片代码网络推广怎么做好
  • 三合一网站模板百度关键字搜索量查询
  • 卓越科技建站无锡做网站互联网营销师培训班