给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

问题一大串,可以简化为找到一个波谷值,同时找到波峰值,计算二者的插值,特别的,波峰值(卖出价格)需要在波谷值(买入价格)之后。

使用两个变量,一个变量记录波谷值,另外一个记录差值。

逻辑判断上“先入为主”,先设置波谷值,这样就能保证差值(利润)计算时波峰值是在波谷值确定后才考虑的。保证了 “波峰值(卖出价格)需要在波谷值(买入价格)之后” 这个条件

一旦遇到新的波谷值就更新波谷值,遇到较高的利润就更新利润。循环完毕,得到的就是最终最优的收益。

代码如下:

class Solution {
public int maxProfit(int[] prices) {
int min=Integer.MAX_VALUE;
int profit=0;
for (int i=0;i<prices.length;i++) {
if(prices[i]<min)
min=prices[i];
else if(prices[i]-min>profit)
profit=prices[i]-min;
}
return profit;
}
}

最新文章

  1. Mysql加锁过程详解
  2. contains与compareDocumentPosition
  3. Build2016上值得一看的大数据相关Session
  4. 启用https协议的方法
  5. .net架构设计读书笔记--第三章 第9节 域模型实现(ImplementingDomain Model)
  6. CAP原则(CAP定理)
  7. jQuery live与bind的区别
  8. HDU 1518 Square
  9. Node 之 Express 学习笔记 第一篇 安装
  10. Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50096, now running 50173.
  11. epoll使用详解(精髓)
  12. JAVA压缩图片 服务器端压缩图片 原创
  13. 设为首页/加入收藏JS代码
  14. iOS10 越狱, openSSH
  15. 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等
  16. Libgdx slg游戏进程记录
  17. 【车】汽车X40保养
  18. scrapy之Crawspider 腾讯招聘实战案例
  19. SpringMVC(十六) 处理模型数据之SessionAttributes
  20. 从零自学Java-6.使用循环重复执行操作

热门文章

  1. swoole与php协程实现异步非阻塞IO开发
  2. go-异常处理-error-panic-recover
  3. DM7的闪回功能及动态新能视图相关SQL总结
  4. 使用Redis在Hibernate中进行缓存
  5. 收藏收藏:时隔一年,你关注的打造一个实用的TXT文本操作及日志框架,我们开源了,不再为程序写日志发愁(也支持.net core哦)
  6. Creator 2.2.0 终于等来了这款Shader组件神器!一招搞定Effect特效
  7. 明解C语言 入门篇 第二章答案
  8. CentOS生产环境无网络安装percona-xtrabackup2.4【RPM安装教程】
  9. Jsp的四大域对象
  10. python中PIL模块