解法都在代码里,不懂就留言或者私信,这个是相对简单点的,感觉会在低职级面试的时候考
class Solution {
/**解题思路:这个是股票系列最简单的题,反正只能卖一次,所以选择利润最高的点买入卖出即可
因为买肯定在卖前面,所以对于每个时间点,在它前面价格最低的点买入就是这个点必须卖出所能获得的最大的利润
这个你可以考虑使用动态规划,但是实际上没有必要,因为我们一个变量(前面最低价格preMin)推到头就行
每个点计算利润的时候前面点卖出的利润都求完了,然后当前点与preMin比较,最低的作为之后点的preMin */
public int maxProfit(int[] prices) {
/**题目给的不可能有null或者长度为0,但是写代码还是注意健壮性
我们至少要有两个交易日才能获得利润,因为不能同一天买卖 */
if(prices == null || prices.length < 2) {
return 0;
}
/**第一天不可能获得利润,把它直接给preMin */
int preMin = prices[0];
int max = 0;
for(int i = 1; i < prices.length; i++) {
/**计算当前点必须卖出所能获得的最大利润,这里不用判断是不是preMin比当前价格还大,因为我们求max
如果这种情况自动会淘汰*/
max = Math.max(max, prices[i] - preMin);
/**不要忘了更新preMin */
preMin = Math.min(preMin, prices[i]);
}
return max;
}
}