【leetcode刷题】9.买卖股票的最佳时机——Java版

简介: 哈喽,大家好,我是一条。糊涂算法,难得糊涂。通过今天的热评提醒大家写代码一定要注意空值的判断,你不知道别人会传给你什么值NullPointerExceptio是最容易解决也是最容易出现的!

Question

难度:简单


给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。


你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。


返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。


示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
    注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

1 <= prices.length <= 105
0 <= prices[i] <= 104

Solution

又是一道动态规划的题

前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}

  • 记录今天之前买入的最小值
  • 计算今天之前最小值买入,今天卖出的获利,也即今天卖出的最大获利
  • 比较每天的最大获利,取最大值即可

Code

所有leetcode代码已同步至github

欢迎star

class Solution {
    public int maxProfit(int[] prices) {
        if (prices.length <= 1) {
            return 0;
        }
        int minPrices=prices[0];
        int maxValue=0;
        for (int i = 1; i <prices.length ; i++) {
            maxValue=Math.max(maxValue,prices[i]-minPrices);
            minPrices=Math.min(minPrices,prices[i]);
        }
        return maxValue;
    }
}

Result

复杂度分析

  • 时间复杂度:O(N)

b9cf19711994d9188bd1b8871f54d34f.png

🌈寻宝

⭐今天是坚持刷题更文的第9/100天


⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力


⭐更多算法题欢迎关注专栏《leetcode》


为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等


怎么领取请大家自己找,寻宝游戏现在开始。


找不到可以评论留言,一条就会注意到你。


如果还不行,请私信我。

54bc192590174279ad876040029fdf12.png

相关文章
|
5月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
196 0
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
177 0
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
242 2
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
226 1
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
251 1
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
214 6
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
326 0
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
224 0
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
213 0

热门文章

最新文章