DP 入门

何为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;

你可能感兴趣的:(刷题,算法,leetcode,动态规划,数据结构,java)