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

天津市建设与管理局网站企业官方网站建设费用

天津市建设与管理局网站,企业官方网站建设费用,网站优化北京seo,免费自建手机网站文章目录 题目链接:题目描述:解题思路一(贪心算法):解体思路二(动态规划): 题目链接: 122.买卖股票的最佳时机II 题目描述: 解题思路一(贪心算法…

文章目录

  • 题目链接:
  • 题目描述:
  • 解题思路一(贪心算法):
  • 解体思路二(动态规划):

题目链接:

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

题目描述:

在这里插入图片描述

解题思路一(贪心算法):

本问题可以通过贪心算法解决。我们可以将问题分解为一系列连续的上涨子序列,并在每个上涨子序列中,计算利润,并将其累加到最终的结果中。具体的做法是:

  • 贪心算法的核心思想:对于每个上升的子序列,我们希望在价格上涨时不断买入,价格下跌时卖出。
  • 连续上升子序列:在遍历股票价格的过程中,如果当前价格小于下一天的价格,说明价格在上涨,应该继续持有股票;如果当前价格大于或等于下一天的价格,说明我们已经遇到了一个下降的趋势,在此时卖出,计算当前区间的利润。
  • 利润计算:每次找到一个上涨子序列时,我们就将该子序列的利润(即当前价格减去子序列的起始价格)累加到总利润中。

复杂度分析:

  • 时间复杂度O(N)
  • 空间复杂度O(1)

代码实现方式一:

找到每一个连续递增子序列,将其差值作为利润记录到总利润中

class Solution {
public:int maxProfit(vector<int>& prices) {int p1 = 0;int p2 = 0;int res = 0;int n = prices.size();while(p2<n-1){if(prices[p2]< prices[p2+1]){p2++;continue;}else{res = res + (prices[p2]-prices[p1]);p2++;p1=p2;}}return res+(prices[p2]-prices[p1]);}
};

代码实现方式2:

  • 每次遍历数组,比较相邻的价格(即 prices[i]prices[i+1]):
  • 如果 prices[i+1] > prices[i],则说明价格上涨,可以在今天买入,明天卖出,获得的利润是 prices[i+1] - prices[i]
  • 如果 prices[i+1] <= prices[i],则不进行操作,不获得任何利润。
    利用 max(0, prices[i+1] - prices[i]) 确保当价格下降时不加入负的利润。
  • 本质上与第一种方式一致,但是这种实现方式更简洁
class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();int res = 0;for(int i=0; i<n-1; i++){res += max(0, prices[i+1]-prices[i]);}return res;}
};

解体思路二(动态规划):

由于题目中要求在任何时候手里最多只有一支股票,因此在每天交易完成后,只可能手里有一支股票或者没有股票的状态

我们可以定义:

  • dp[i][0] : 表示第i天交易完成后手里没有股票的最大利润(i从0开始)
  • dp[i][1] : 表示第i天交易完成后手里持有一支股票的最大利润(i从0开始)

因此dp[i][0] 的转移方程,如果这一天交易完成后手里没有股票,那么可能的状态转移为前一天已经没有股票了,即 dp[i-1][0],或者前一天结束的时候手里有一支股票,即dp[i-1][1],这时候我们要将其卖出,并获得prices[i]收益。因此为了利益最大化,我们的状态转移方程:

d p [ i ] [ 0 ] = max ⁡ ( d p [ i − 1 ] [ 0 ] , d p [ i − 1 ] [ 1 ] + p r i c e s [ i ] ) dp[i][0] = \max \left( dp[i-1][0], dp[i-1][1] + prices[i] \right) dp[i][0]=max(dp[i1][0],dp[i1][1]+prices[i])

再来考虑dp[i][1],如果转移状态前一天已经持有一支股票。即dp[i-1][1],或者前一天结束的时候手里没有股票,即dp[i-1][0],这时候我们要将其买入,并减少prices[i]的收益。可以列出状态转移方程:

d p [ i ] [ 1 ] = max ⁡ ( d p [ i − 1 ] [ 0 ] − p r i c e s [ i ] , d p [ i − 1 ] [ 1 ] ) dp[i][1] = \max \left( dp[i-1][0] - prices[i], dp[i-1][1] \right) dp[i][1]=max(dp[i1][0]prices[i],dp[i1][1])

对于初始状态,我们直到在第0天交易结束的时候:

  • dp[0][0] = 0
  • dp[0][1] = -prices[0]

代码实现:

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();int dp[n][2];dp[0][0] = 0;dp[0][1] = -prices[0];for(int i=1; i<n; i++){dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i]);dp[i][1] = max(dp[i-1][0]-prices[i], dp[i-1][1]);}return dp[n-1][0];}
};

动态规划解析参考:

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/solutions/476791/mai-mai-gu-piao-de-zui-jia-shi-ji-ii-by-leetcode-s/?envType=study-plan-v2&envId=top-interview-150

http://www.yayakq.cn/news/218147/

相关文章:

  • 建设银行的官方网站电话如何做网站排名优化
  • 查看WordPress网站插件wordpress全图水印
  • 大众软件回应中国芯片行业最大投资广州新塘网站seo优化
  • 有什么做数据的网站网站开发的进度安排
  • 南阳网站建设公司wordpress自定义文章类别
  • vue前端可视化开发工具网站建设优化推广
  • 可以免费做商业网站的cms浦江网站建设公司
  • 网站维护费用怎么收列举网站建设的SEO策略
  • 室内设计专业网站网站维护服务基本内容
  • wordpress网站主机名网站后台如何上传附件
  • 建设网站选多大的空间合适微信小程序商城多少钱
  • 北京网站手机站建设公司云砺信息科技做网站
  • 站长工具查询系统wordpress阿里云云存储
  • 做网站后期维护杭州好的vi设计公司
  • 能进入各种网站的浏览器自己做游戏app的网站
  • 网站关闭申请书京东商城网站建设目的
  • 网站2019建设目标最安全的网站语言
  • 郑州网站优化托管熟悉网站空间 域名等相关知识
  • 网站快速收录工具上海网站建设兴策
  • wordpress能做企业站吗网页界面设计评分标准
  • 淘宝网站建设的缺点学校网站栏目建设
  • 怎样提高网站访问速度关键词库在网站上怎么体现
  • 如何做自己的博客网站世界优秀摄影作品网站
  • 公司申请网站备案wordpress怎么开发主题
  • 东莞莞城网站建设公司网站建设解析
  • 亳州做网站的公司敬请期待翻译
  • 门户网站建设招标文件文件怎么添加到wordpress
  • 哪家小吃培训网站做的最好小游戏代理平台
  • 东莞建外贸网站网站建设忽悠
  • 教育培训机构招生网站建设微信小程序商城定制开发