Leetcode面试经典150题-121.买卖股票的最佳时机

解法都在代码里,不懂就留言或者私信,这个是相对简单点的,感觉会在低职级面试的时候考

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值