差分数组 + 最大子序和
假设一个数组有{a, b, c}三个元素,那他的差分数组即为{b-a, c-b}
那么可知c-a = (c-b) + (b-a)
所以这道题就变成了差分数组后求最大子序和的问题
代码如下
class Solution {
public int maxProfit(int[] prices) {
int[] dp = new int[prices.length];
int result = 0;
for (int i = 1; i < prices.length; i++) {
dp[i] = prices[i] - prices[i - 1];
}
for (int i = 1; i < prices.length; i++) {
dp[i] = Math.max(dp[i], dp[i + 1] + dp[i]);
result = Math.max(result, dp[i]);
}
return result;
}
}