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

121 买入股票的最佳时机

思路1:

买的那天一定是卖的那天之前的最小值。 每到一天,维护那天之前的最小值即可。

假设第一天是最小值,最大值初始化为0,当以后某天的价格小于最小值时,将最小值更新

当天价格大于最小值,说明有利可图,就取之前的最大值,和当天的收益之中的最大值当做最大值。
 

int maxProfit(int* prices, int pricesSize) 
{int maxleft;int minv=prices[0];if (pricesSize == 1)return 0;int i = 1;int j = 0;int maxv = 0;for(i; i < pricesSize; i++){if (prices[i] > minv){maxv = getmax(maxv, prices[i]-minv);}else{minv = prices[i];}}return maxv;
}

思路2:动态规划

状态:

  • dp[i][0] 第 i 天持有股票的最大剩余现金;
  • dp[i][1] 第 i 天不持有股票的最大剩余现金

初始化:

      dp[0][0] = 0            //不持有股票,不买入
      dp[0][1] = -prices[0]  //买入

状态转换:

        //第i天不持有股票,分两种情况,一种是已经卖出或一直没买入,那dp[i][0] = dp[i-1][0]

        第二种是卖出,i天的价位加上i-1的剩余价值。两种取最大值。

        dp[i][0] = getmax(dp[i-1][0], prices[i]+dp[i-1][0]); 

       //第i天持有股票,分两种,一种是刚买入,dp[i][1] = -prices[i], 第二种是保持持有dp[i][1] = dp[i-1][1]

        dp[i][1] = getmax( -prices[i],dp[i-1][1] )

int maxProfit(int* prices, int pricesSize) 
{int dp[pricesSize][2];memset(dp, 0, sizeof(dp));dp[0][0] = 0;dp[0][1] = -prices[0];if (pricesSize == 1)return 0;int i = 1;for(i; i < pricesSize; i++){//不持有股票=(卖出, 已经卖出)dp[i][0] = getmax(dp[i-1][0], prices[i]+dp[i-1][0]);//持有股票=(买入, 已经买入)dp[i][1] = getmax(dp[i-1][1], -prices[i]);}return dp[pricesSize-1][0];
}


http://www.mrgr.cn/news/83010.html

相关文章:

  • 【已解决】如何让容器内的应用程序使用代理?
  • nginx http反向代理
  • 设计模式-结构型-适配器模式
  • 基于Elasticsearch8的向量检索实现相似图形搜索
  • Linux环境下确认并操作 Git 仓库
  • NLP 技术的突破与未来:从词嵌入到 Transformer
  • 【cuda学习日记】2.1 2D matrix操作
  • Apache Traffic存在SQL注入漏洞(CVE-2024-45387)
  • docker 常用命令实践DEMO
  • Power BI如何连接Azure Databricks数据源?
  • 新华三H3CNE网络工程师认证—常见操作指令总结
  • oracle位运算、左移右移、标签算法等
  • C++ 11,14,17 新特性
  • 入门嵌入式(四)——IICOLED
  • 阿尔法linux开发板ping不通百度
  • STM32之CAN通讯(十一)
  • 总结 Vue 请求接口的各种类型及传参方式
  • halcon三维点云数据处理(八)3D模型匹配相关函数
  • List ---- 模拟实现LIST功能的发现
  • MBTiles 及爬取到发布与数据转换
  • torch.max和torch.softmax python max
  • 【算法】字符串算法技巧系列
  • nginx 配置 本地启动
  • 二、BIO、NIO编程与直接内存、零拷贝
  • ubuntu18升级至ubuntu20
  • 【STM32+CubeMX】 新建一个工程(STM32F407)