题解 | #买卖股票的最好时机#

买卖股票的最好时机

http://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec

描述

假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。

示例1

输入:
[1,4,2]

返回值:
3

示例2

输入:
[2,4,1]

返回值:
2

思路

这个和咱们现实中买股票是一样的,总是希望在最低点买入,在最高点卖出。这道题也是如此,咱们只要找到那天是最低点,并计算每天卖出能挣多少钱,找到卖出最多钱的那天就是这道题的答案。

AC 代码

    public int maxProfit (int[] prices) {
        // write code here
        if (prices == null || prices.length < 1) {
            return -1;
        }
        // 历史最低价格
        int minPrice = Integer.MAX_VALUE;
        // 最大的差价
        int maxProfit = 0;
        // 遍历每天
        for (int i = 0; i < prices.length; i ++) {
            // 如果价格比目前记录的最低价格还低,那么就今天买入!
            if (prices[i] < minPrice) {
                minPrice = prices[i];
            } else {
                // 否则就计算今天卖出能赚多少钱
                int price = prices[i] - minPrice;
                // 更新赚钱的最大差值
                maxProfit = price > maxProfit ? price : maxProfit;
            }
        }
        return maxProfit;
    }
  • 时间复杂度:O(n),n 数组长度。
  • 空间复杂度:O(1),没有浪费额外空间。

最后

大家可以去 【牛客网-题库-在线编程】去练习一下。
可以去微信搜索:【蘑菇睡不着】交个朋友~
也可以扫描下方二维码。

图片说明

AC_算法题 文章被收录于专栏

AC 算法题

全部评论

相关推荐

03-24 21:23
已编辑
郑州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务