题解 | #买卖股票的最好时机(二)#

买卖股票的最好时机(二)

http://www.nowcoder.com/practice/9e5e3c2603064829b0a0bbfca10594e9

参照链接(之前写过的):
题解 | #买卖股票的最好时机(一)#

解题思路:
参照之前写的(一)的代码,其实只要在其中稍作改动:一、新增一个值pmax,用于记录最后一次买卖股票之前的盈利最大值,在更新s_dp(每次要买股票所花费的钱)时pmax累加之前max的值,同时max归0,最后返回max + pmax;二、原本max = Math.max(max, dp[i]);处改为判断dp[i]是否小于等于max:若是则更新s_dp、pmax,max归0,若不是则max的值为dp[i]。

代码展示(java):

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算最大收益
     * @param prices int整型一维数组 股票每一天的价格
     * @return int整型
     */
    public int maxProfit (int[] prices) {
        int[] dp = new int[prices.length];
        dp[0] = -1*prices[0];
        int s_dp = dp[0];
        int max = 0, pmax = 0;    //增加pmax为历史最大值
        for (int i = 1; i<prices.length; i++) {
            //确定dp[i]的值
            if (s_dp+prices[i]>0) {
                dp[i] = s_dp+prices[i];
                //更新最大值max
                if (dp[i]<=max) {
                    pmax += max;
                    max = 0;
                    dp[i] = -1*prices[i];
                    s_dp = dp[i];
                }
                else {
                    max = dp[i];
                }
            }
            else {
                pmax += max;
                max = 0;
                dp[i] = -1*prices[i];
                s_dp = dp[i];
            }
        }
        return max+pmax;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-22 13:08
Data_Seven:真不知道这些企业哪来的成就感
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务