何为DP:
简单的DP
最大子序列和
public int maxSubarrry(int[] nums){
int n = nums.length;
int curMax = nums[0];
int globalMax = nums[0];
for (int i = 1; i < n; i++){
curMax = curMax < 0 ? nums[i] : curMax + nums[i];
globalMax = Math.max(curMax, globalMax);
}
return globalMax;
}
curMax
可以记录一段子序列的和,并且当其已经小于0是重新开始计数,因为无论如何 curMax
小于0时的子序列会比前i-1的子序列和要小,
globalMax
记录并更新全局最大的子序列和。
买股票
public int maxProfit(int[] prices){
int n = prices.length;
int minPrice = Integer.MAX_VALUE;
int maxPrice = 0;
for (int i = 0; i < prices.length; i++){
minPrice = Math.min(minPrice, prices[i]);
maxPrice = Math.max(price[i] - minPrice, maxPrice);
}
return maxPrice;
}
- 记录买入股票最便宜的时候,然后遍历数组并更新maxPrice;