题解 | #买卖股票的最好时机(二)#
买卖股票的最好时机(二)
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;
}
}