前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法简单题,吾辈重拳出击 - 买卖股票的最佳时机

算法简单题,吾辈重拳出击 - 买卖股票的最佳时机

作者头像
掘金安东尼
发布2022-09-19 10:29:57
3400
发布2022-09-19 10:29:57
举报
文章被收录于专栏:掘金安东尼

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情


昨天,大A又痛伤我们一次。让人不禁想问:什么才是买卖股票的最佳时机??

看下面这张图,原来股市预测是数学深渊的尽头。

image.png
image.png

我尼玛,罢了罢了,现实中,预测股票太难了~

不如回到咱们的:**算法题- 买卖股票的最佳时机**,原则就一个:简单题,重拳出击!!

image.png
image.png

题目:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:

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

示例 2:

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

解:

思路:

后面的数字一定要大于前面的数字,才会有利润。

我们看示例拆解问题:[7,1,5,3,6,4]

如果数组是 [7],利润为 0

如果数组是 [7,1],1小于7,利润为 0

如果数组是 [7,1,5],利润为 5-1=4

如果数字是 [7,1,5,3],利润最大是 5-1=4

如果数字是 [7,1,5,3,6],利润最大是 6-1=5

如果数字是 [7,1,5,3,6,4],利润最大是 6-1=5

所以,最大利润为 5

这题看着有点像“连续子数组最大和”那道题。

将题目中的话转化理解:

  1. 怎么保证最大?用数组靠右边最大的数,减去数组靠左边最小的数;
  2. 用一个变量 min 来存储最小值。
  3. 然后一次遍历,用当前项减去最小值,得到利润,然后每次遍历都更新这个利润值,保证它始终最大
  4. 最后输出最大利润值

代码实现:

代码语言:javascript
复制
/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let min = prices[0]
    let res = 0
    for(let i=0,len=prices.length;i<len;i++){
        if(prices[i] < min){
           min = prices[i]
        }else if(prices[i]-min > res){
            res = prices[i] - min
        }
    }
    return res
};
image.png
image.png

小结:

现实中的股票买卖比这个难太多了。。。

OK,以上便是本篇分享。点赞关注评论,为好文助力👍 我是掘金安东尼 🤠 100 万人气前端技术博主 💥 INFP 写作人格坚持 1000 日更文 ✍ 关注我,安东尼陪你一起度过漫长编程岁月 🌏

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档