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

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.kler.cn/a/471336.html

相关文章:

  • 分享:osgb倾斜数据转cesium-3dtiles 小工具.
  • 什么是 ES6 “模板语法” ?
  • Leecode刷题C语言之按键变更的次数
  • xml-dota-yolo数据集格式转换
  • 如何快速上手一个鸿蒙工程
  • 最好用的图文识别OCR -- PaddleOCR(2) 提高推理效率(PPOCR模型转ONNX模型进行推理)
  • C4D2025 win版本安装完无法打开,提示请将你的maxon App更新至最新版本,如何解决
  • RabbitMQ如何实现队列持久化
  • Python数据可视化-Pandas绘图
  • ubuntu20.04 在线安装postgresql 扩展postgis
  • UVM:uvm_component methods configure
  • 【HarmonyOS 5.0】从0到1开发购物应用App(二):登录页对接口
  • Elixir语言的计算机基础
  • idea下java的maven项目编译内存溢出GC overhead limit exceeded解决办法
  • javafx 将项目打包为 Windows 的可执行文件exe
  • 【开源免费】基于SpringBoot+Vue.JS多维分类的知识管理系统(JAVA毕业设计)
  • Chrome访问https页面显示ERR_CERT_INVALID,且无法跳过继续访问
  • Python自学 - 封装与私有化
  • BaseCTF scxml 详解
  • 基于COT(Chain-of-Thought Prompt)的教学应用:如何通过思维链提示提升模型推理能力
  • 107周二复盘 (185)Demo打包
  • 内置AI与浏览器的开源终端Wave Terminal安装与远程连接内网服务器教程
  • C语言字符串函数详解
  • Pytest-Bdd-Playwright 系列教程(18):使用 Jinja2 钩子函数生成自定义测试报告
  • Postman接口测试04|批量运行测试用例、参数化、Mock Server、Cookie鉴权、Newman生成测试报告
  • JNPF 低代码技术架构与核心组件深度剖析