LeetCode 121 买卖股票的最佳时机
Leetcode 121 买卖股票的最佳时机
给定一个数组nums,其中每个数字num表示第i天的股票价格。要求同一天内最多只能进行一次交易(买入/卖出)且只能买入/卖出各一次,求能够获得的最大利润。
动态规划
思路:
- 第i天卖出能够获得的利润 = 第i天股票价格 - 前i天的最低价格(min_i)
- 到第i天为止的最大利润 = 第i天的利润 和 前i-1天的最大利润中的最大值
- dp[i]表示到第i天为止的最大利润,则dp[i] = max(nums[i]-min_i, dp[i-1])
- 初始状态dp[0] = 0, dp[1] = 0
public class Solution {
public int maxProfit(int prices[]) {
if(prices==null || prices.length==0) {
return 0;
}
int min_i = prices[0]; //到第0天为止的最低价格
int[] dp = new int[prices.length];
for(int i=1; i<dp.length; i++) {
min_i = Math.min(min_i, prices[i]); //更新到第i天为止的最低价格
dp[i] = Math.max(dp[i-1], prices[i]-min_i);
}
return dp[prices.length-1];
}
}