题目:
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
来源:力扣(LeetCode)
思路:
贪心:计算差值,只要正数
动态规划:记录持有和不持有两种状态,最后不持有股票时利润最大!
代码:
贪心 + 动态规划
class Solution {
public int maxProfit(int[] prices) {
//一直下降就不卖
if(prices == null || prices.length == 0 || prices.length == 1) return 0;
//1.贪心
int len = prices.length;
int num = 0;
int res = 0;
for(int i = 1;i < len;i++){
num = prices[i] - prices[i - 1];
if(num >= 0) res += num;
}
return res;
//2.动态规划:每天手里两种状态:持有股票;不持有股票
int[] dp = new int[2];//用来记录两种状态;数值是此状态的最大利润数
dp[0] = 0;//不持有股票
dp[1] = -prices[0];//持有股票
for(int i = 1;i < prices.length;i++){
dp[0] = Math.max(dp[0],dp[1] + prices[i]);
dp[1] = Math.max(dp[1],dp[0] - prices[i]);
}
return dp[0];//手里不持有股票是最大化利润
}
}