题目地址:
https://www.lintcode.com/problem/best-time-to-buy-and-sell-stock/description
给定一个正数数组 A A A,代表每天股票的价格。只允许做一次买卖交易,问能获得的最大利润是多少。
我们只需要枚举卖出的时间即可。在卖出的时间确定的时候,能得到的最大利润就取决于之前的几天的股票最低价是多少。设 f [ i ] f[i] f[i]是 A [ i ] A[i] A[i]之前的股价最低价,则有: f [ i ] = min { f [ i − 1 ] , A [ i ] } f[i]=\min\{f[i-1],A[i]\} f[i]=min{f[i−1],A[i]}那么在 A [ i ] A[i] A[i]价格卖出的最大利润就是 A [ i ] − f [ i ] A[i]-f[i] A[i]−f[i],以此更新最终答案即可。代码如下:
public class Solution {
/**
* @param prices: Given an integer array
* @return: Maximum profit
*/
public int maxProfit(int[] prices) {
// write your code here
int res = 0, curMin = Integer.MAX_VALUE;
for (int i = 0; i < prices.length; i++) {
curMin = Math.min(curMin, prices[i]);
res = Math.max(res, prices[i] - curMin);
}
return res;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。