问题 B: 买卖股票

问题 B: 买卖股票

时间限制: 5 Sec  内存限制: 128 MB
提交: 247  解决: 115
提交 状态 算法问答 

题目描述

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

在每一天,你可能会决定购买或出售股票。你在任何时候 最多 只能持有 一手 股票。你也可以购买它,然后在同一天出售。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

思考题:如果问题拓展成最多可以完成 k笔 交易,那算法应该怎么设计呢?

样例1

输入:4 4 6 1 1 4 2 5

输出:

解释:在第 4 天(股票价格 = 1)的时候买入,在第 6 天(股票价格 = 4)的时候卖出,这笔交易所能获得利润为 4-1 = 3 。随后,在第 7 天(股票价格 = 2)的时候买入,在第 8 天 (股票价格 = 5)的时候卖出,这笔交易所能获得利润为 5-2 = 3 。

样例2

输入:2 3 4 5 6

输出:

解释:在第 1 天(股票价格 = 2)的时候买入,在第 5 天 (股票价格 = 6)的时候卖出, 这笔交易所能获得利润为 6-2 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

样例3

输入:8 6 5 2 1 

输出:

解释:在这个情况下, 没有交易完成, 所以最大利润为0。

输入

一行整数,数字与数字之间以空格隔开

输出

一个整数

样例输入

4 4 6 1 1 4 2 5

样例输出

6

提示


每一天你可以做出哪些选择?

在整个过程中你最多会经历几种不同的状态?

提交 状态