交易日

来源:互联网 发布:淘宝店铺优惠券 编辑:程序博客网 时间:2024/04/30 07:00

在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。

给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。

测试样例:
[10,22,5,75,65,80],6
返回:87

这道题可以用动态规划法来做。用i把时间分成两部分,分别取两部分的最大收益,经过判断就可以得到最合适的i,即得到最大收益

代码如下:

import java.util.*;public class Stock {    public int maxProfit(int[] prices, int n) {        // write code here        int[] pre_pro = new int[n];        int[] last_pro = new int[n];                int min_buy = prices[0];        for(int i=1; i<n; i++) {            min_buy = Math.min(prices[i], min_buy);            pre_pro[i] = Math.max(pre_pro[i-1], prices[i] - min_buy);        }                int max_sell = prices[n-1];        for(int i=n-2; i>=0; i--) {            max_sell = Math.max(prices[i], max_sell);            last_pro[i] = Math.max(last_pro[i+1], max_sell-prices[i]);        }                int res = 0;        for(int i=0; i<n; i++) {            res = Math.max(res, pre_pro[i]+last_pro[i]);        }        return res;    }}



0 0
原创粉丝点击