Python|你真“贪心”之买股票

引言

当今社会很多人都喜欢选择一种投资方式—买股票。股票波动比较大,自然风险也很高,当然如果方向选择正确,获益也是比较高的。那么用贪心算法解决买股票的题再合适不过了。因为大家都是想低价买入,高价卖出,收益自然就很多,这一点足以体现贪心。那么贪心算法是对局部的最优解,自然就不是整体的最优解,关键在于贪心的策略的不同,策略的过程不会影响以后的状态,只与当前状态有关。

问题描述

给定一个数组prices,其中prices[i]是一支给定股票第i天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例1:

输入:prices = [7,1,5,3,6,4]

输出:7

示例2:

输入:prices = [1,2,3,4,5]

输出:4

解决方案

其实本道题目有两种解决方法,其一是动态规划,其二就是贪心算法;在这里我们将讲解贪心算法,贪心算法是这道题的特殊解法。结合示例1来看,第一天股票价格太高不买入,第二天价格低买入,第三天股票价格升高,卖出股票,这笔交易收入5-1=4,第四天的时候买入,第五天又卖出,则获得利润6-3=3,总获得利润为7。结合下图一起看。

现在我们结合示例2看,又会发现差别。由于前几天价格都低,但是又不能连续买入,因为这样属于同时参与多笔交易。

像示例1和2是两种不同的类型,对于示例一我们需要找出升区间,然后计算峰值与最低值的价格差,即[1,5]和[3,6]两个区段都是再升,那么他们的差值相加就是最终的收益。示例二是一个升区间,例[a,b,c,d,e],假设这里面的元素大小依次增加,即e最大,a最小,那么最大收益必然是e-a,e-a=(e-d)+(d-c)+(c-b)+(b-a)。所以在写的时候就要判断前后两天的价格差是否大于0,若大于0就要添加到收益里面。

结语

解决此题可能还有很多方法,我用了贪心算法,在编写程序前一定要读懂题目的意思,不要一拿到题目就写代码,先对题目分析,看看该如何去解决,每个示例的不同点在什么地方。

实习编辑:王晓姣

作者:赵玉琴

稿件来源:深度学习与文旅应用实验室(DLETA)

(0)

相关推荐

  • 理解贪心算法

    从前有一只鹅,一天可以下两个金蛋,但是直接杀了他可以拿到二十个金蛋. 问在21天内拿到尽量多的金蛋? 动态规划..前20天不杀,最后一天杀.40个 贪心..第一天下蛋,得到一个金蛋 第一天杀,得到20 ...

  • (1条消息) 字节尿性,康托展开求第K个排列!

    今天是小浩算法 "365刷题计划" 第 109 天.继续为大家讲解 leetcode 第 60 题,是一道中等难度的题目. 排列类别的问题主要就两个,一个是全排列: 小白真能看一篇 ...

  • (1条消息) 漫画:反转字符串

    恭 贺 新 禧 今天是初一,因为新型肺炎外出的活动基本都取消了,待在家里学习看书陪陪家人.希望大家也提高意识,能不出门就尽量别出了! 过年期间的计划是为大家每天讲解一道比较简单经典的题目,希望大家支持 ...

  • (1条消息) 漫画:一文看懂螺旋矩阵求解

    今天为大家分享一道关于螺旋矩阵的问题. 话不多说,直接看题目. 01 第54题:螺旋矩阵 第54题:定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素 ...

  • 漫画:知乎面试题(旋转数组最小值Ⅱ

    今天是小浩算法"365刷题计划"第72天.继续为大家讲解二分法系列篇 - 旋转排序数组最小值Ⅱ(进阶版).话不多说,直接看题: 01 PART 旋转排序数组最小值Ⅱ 昨天为大家讲解 ...

  • 贪心系列 之 救生艇的逃生

    小浩算法改版了,大家看一下风格怎么样,还喜欢吗?所有的排版,绘图,文案,题解都是由小浩一人完成哦~ 今天为大家分享一道关于"救生艇"的题目. 话不多说,直接看题. 01 第881题 ...

  • 这两个Python工具真香!修改代码不会影响运行

    你是否运行过for循环并希望在for循环内的代码中添加更多详细信息?你可能会决定不这样做,因为添加更多详细信息意味着需要停止代码并重新运行所有内容. 代码已经运行了几个小时,停止代码会让人不爽.如果可 ...

  • B 站上这些 Python 视频真香!

    大概有以下这么几个方向. 一.小甲鱼零基础入门学习Python 小甲鱼的这个教学视频在b站已经有1455万的播放量了,搜索结果排名第一名,全套共96节,课程有趣幽默,很多朋友都是通过这个入门的.如果你 ...

  • 该死!B 站上这些 Python 视频真香!

    作者丨wLsq 来源丨经授权转自Python数据科学(ID:PyDataScience) 大家好,我是东哥. 无论什么时候,都有初学者存在找不到学习资源的困惑.其实呢,一般通过百度.知乎估计也都能找到 ...

  • 245道Python面试真题!

    文章 高富帅程序员 最近搜罗了网上的各种面试题,现在做成了 PDF 版本的<Python面试大全>,涵盖了Python基础.Python高级部分.Python语言特性.操作系统.数据库.网 ...

  • 费德勒,真贪心

    说费德勒"贪心"并没有任何贬低意味,毕竟"不知足者长乐"可以力保他保持状态常青. 38岁的"高龄"年纪,费德勒仍高居世界第三,ATP巡回赛冠 ...

  • 15个好用到哭的python库,真不错!

    为什么很多人喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行. 在本文中,我挑选了15个最 ...

  • 真香!15个新手不可错过的Python高级库

    原文作者:Erik van Baaren,译者:数据黑客 原文:https://medium.com/tech-explained/top-15-python-packages-you-must-tr ...

  • Python|易懂的算法“贪心”

    前言 有一种算法叫"贪心","贪心"又可叫做"贪婪",贪得的欲望,从字面意思上不难理解这种算法求解目的就是贪心的,为什么这么说,因为这种算法 ...

  • 真爱难寻,男人女人都不要太贪心

    图文 网络 编辑 蕙质兰心 真爱难寻,男人女人都不要太贪心放弃一个很爱你的人,并不痛苦:放弃一个你很爱的人,那才痛苦:爱上一个不爱你的人,那更痛苦.若是有缘,时间.空间都不再是距离:若是无缘,终是相聚 ...