利用动态规划来求解
遍历prices数组,记录每一个元素的最大利润,最大利润最低可以为0,即当天买当天卖
例如一个股票价格数组[7,1,5,3,6,4],最大利润为5
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
class Solution {
public int maxProfit(int[] prices) {
int profit=0;
int cost=Integer.MAX_VALUE;
for(int price:prices){
//最大利润时买进的价格(即最小)
cost= Math.min(cost,price);
//最大利润
profit=Math.max(profit,price-cost);
}
return profit;
}
}
复杂度分析
时间复杂度:遍历一个数组,所以为O(n)
空间复杂度: 创建了 profit,和cost两个变量,所以为O(1)