python买卖股票的最佳时机(基于贪心/蛮力算法)


Posted in Python onJuly 05, 2019

开始刷leetcode算法题 今天做的是“买卖股票的最佳时机”

题目要求

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

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

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

看到这个题目 最初的想法是蛮力法

通过两层循环 不断计算不同天之间的利润及利润和

下面上代码

class Solution(object):
  def maxProfit(self, prices):
    """
    :type prices: List[int]
    :rtype: int
    """

    self.allbuy1 = []  #单次买卖的差值数组 (可能为负)
    self.allbuy2 = []  #所有可能买卖的利润数组 (可能为负)
               # allbuy1和allbuy2的区别为一个是单次买卖 一个是多次买卖和
    self.curbuy(prices,0,0) #prices 为价格表 0:初始 0:
    #print(self.allbuy1)
    #print(self.allbuy2)
    return self.picBigest(self.allbuy2)
  def buyticket(self,prilist,a,b):    #list:放入的价格数组 a:上一次买入的价格 b:今天卖出的价格
    return prilist[b] -prilist[a]  #返回 赚取得价格

  def curbuy(self,plist,x,result): #plist:价格数组 x:当天的数组坐标 result: 利润
    obj=result           #固定上一次的价格 保存为上一个递归
    lens=len(plist)        #天数
    for i in range(x,lens-1):
      for j in range(i+1,lens):
        temp=self.buyticket(plist,i, j)
        self.allbuy1.append(temp)
        self.allbuy2.append(temp)   #单次利润放入数组
        result = obj + temp   #将之前的利润加上今天的利润
        if(x>=2):       #如果买入是第2+1天以后 则可以加上之前的利润
          self.allbuy2.append(result) #多次买卖利润放入数组
        self.curbuy(plist,j+1,result)  #递归 j+1:卖出的后一天 result:利润

  def picBigest(self,reslist): 
    big=0
    for i in reslist:
      if (i>big):
        big=i
    print(big)
    return big

if __name__ == '__main__':
    test=Solution()
    prices = [5,7,3,8] # 输入的每日股票数组
    test.maxProfit(prices)

分析:

这个代码理解起来简单 就是将所有可能都放入数组中 找出最大一个可能

将这个代码提交时 显示 超出时间限制 确实 如果输入的数组长度非常大时 计算量巨大 出现错误

——————————————————————————————————————————————————————————————————————————————

更换思路:利用贪心算法解决此事

首先介绍 一下贪心算法: 对问题只对当前情况进行最优解处理,之后发生什么对之前的决定都不改变。简单的说就是一个局部最优解的过程

介绍个例子就明白了: 找零钱问题

假设有面值为5元、2元、1元、5角、2角、1角的货币,需要找给顾客4元6角现金,为使付出的货币的数量最少

  • 首先找出小于4元6角的最大面值(2元)

  • 其次找出小于2元6角的最大面值(2元)

  • 接着找出小于6角的最大面值(5角)

  • 最后找出小于1角的最大面值(1角) ---付出4张纸币

介绍完了贪心算法简单思想 就利用该方法解决对应问题

在已知股票价格走势情况下 只需要对下一天进行判断 如果涨了 则买 如果跌了则卖 这样收益会保持固定增长

当然了 有人会提出 我可以选择不卖等几天再卖 或不买等几天再买 的方式 一样可以保持增长 但是如图

python买卖股票的最佳时机(基于贪心/蛮力算法)

如果在第2天买入 3天卖出 4天买入 5天卖出 收益为A+B

如果在第2天买入 5天卖出 收益为 C

明显得出A+B大于C 所以贪心法在这种情况非常适用并且肯定得到最优解

直接上代码

class Solution(object):
  def maxProfit(self, prices):
    profit = 0
    for day in range(len(prices)-1):
      differ = prices[day+1] - prices[day]
      if differ > 0:
        profit += differ
    return profit
if __name__ == '__main__':
    test=Solution()
    prices = [5,7,3,9] # 输入的每日股票数组
    print(test.maxProfit(prices))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
python中的字典操作及字典函数
Jan 03 Python
django+mysql的使用示例
Nov 23 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
详解Python 函数如何重载?
Apr 23 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
python 子类调用父类的构造函数实例
Mar 12 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python实现无边框进度条的实例代码
Dec 30 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
Python 计算任意两向量之间的夹角方法
Jul 05 #Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 #Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 #Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 #Python
python读出当前时间精度到秒的代码
Jul 05 #Python
python读写csv文件方法详细总结
Jul 05 #Python
Python考拉兹猜想输出序列代码实践
Jul 05 #Python
You might like
第二节 对象模型 [2]
2006/10/09 PHP
php session的锁和并发
2016/01/22 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python实现代码统计程序
2019/09/19 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
Python能做什么
2020/06/02 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
java字符串格式化输出实例讲解
2021/01/06 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
校长寄语大全
2014/04/09 职场文书
应届毕业生自荐书
2014/06/18 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
暑假安全保证书
2015/02/28 职场文书
房屋质量投诉书
2015/07/02 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
golang在GRPC中设置client的超时时间
2021/04/27 Golang
Python max函数中key的用法及原理解析
2021/06/26 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL