情境描述:

       股票信息包括每天交易的最高价、最低价以及开盘价。设计算法,根据给定的股价走势信息,决定买入和卖出策略,保证交易获得的利润最大化

方法一:暴力枚举法

# 定义股票开盘价数组
s=[10,4,8,7,9,6,2,5,3]
maxProfit=0
buyDay=0
sellDay=0
# 遍历所有可能组合
for i in range(len(s)-1):for j in range(i+1,len(s)):if s[j]-s[i]>maxProfit:maxProfit=s[j]-s[i]buyDay=iselDay=j
print("应该在第{0}天买入,在第{1}天卖出,最大利润为{2}".format(buyDay+1,selDay+1,maxProfit))

输出

应该在第2天买入,在第5天卖出,最大利润为5

分析:这个算法的时间复杂度为n^2,显然不是最优解

方法二:分治法

思路:在前半部分找到最小值,在后半部分找到最大值,只需要一个循环即可

def findMaxProfit(S):# 返回值格式:买入日期,卖出日期,最大利润if len(S)<2:return [0,0,0]if len(S)==2:if (S[1]-S[0])>0:return [0,1,S[1]-S[0]]else:return [0,0,0]left=findMaxProfit(S[0:int(len(S)/2)])right=findMaxProfit(S[int(len(S)/2):int(len(S))])finnalResult=leftif (right[2]>left[2]):right[0]+=int(len(S)/2)right[1]+=int(len(S)/2)finnalResualt=right# 遍历最低买入日期和最高卖出日期lowPrice=S[0]highestPrice=S[int(len(S)/2)]buyDay=0selDay=int(len(S)/2)# 遍历最低买入日期for i in range(0,int(len(S)/2)):if (S[i]<lowPrice):buyDay=ilowPrice=S[i]# 遍历最高卖出日期for j in range(int(len(S)/2),int(len(S))):if (S[j]>highestPrice):selDay=jhighestPrice=S[j]# 计算最大利润if (highestPrice-lowPrice>finnalResult[2]):finnalResult[0]=buyDayfinnalResult[1]=selDayfinnalResult[2]=highestPrice-lowPricereturn finnalResult
S=[1,2,9,4,5,6,7,10]
maxProfit=findMaxProfit(S)
print("在第{0}天买入,在第{1}天卖出,可以获得最大利润{2}:".format(maxProfit[0]+1,maxProfit[1]+1,maxProfit[2]))

输出

在第1天买入,在第8天卖出,可以获得最大利润9:

分析:这种方法使用递归来实现,首先将问题分解为两个部分,在两个小的部分分别遍历最小值和最大值,然后再回传差值即可。 时间复杂度为nlg(n)

方法三:最优解法

S=[1,2,9,4,5,6,7,10]
minPrice=S[0]
buyDay=0
selDay=0
profit=0
i=0
for i in range(len(S)):# 遍历最小买入值if (S[i]<minPrice):minPrice=S[i]buyDay=i# 遍历最大收益值if (S[i]-minPrice>profit):profit=S[i]-minPriceselDay=i
print("在第{0}天买入,在第{1}天卖出,可以获得最大利润{2}:".format(buyDay+1,selDay+1,profit))

输出

在第1天买入,在第8天卖出,可以获得最大利润9:

分析:这种方法只需要遍历一遍数组,时间复杂度为n

《python程序员面试宝典(陈屹)》chapter1 技术面试方法论相关推荐

  1. python程序员面试宝典 陈屹_程序员面试宝典 - 总结

    1 类型转换 当执行算术运算时,操作数的类型如果不同,就会发生转换,数据类型一般朝着浮点精度高.长度更长的方向转换,整数型如果转换为signed不会丢失信息,就转换为signed,否则转换为unsig ...

  2. python程序员面试宝典 陈屹_Python 面试宝典

    步入 9 月,徐徐的秋风给酷热的天气带来丝丝凉意.同时,也吹来一股招聘高潮.俗话说"金九银十",每年的 9.10 月都是招聘高潮.有些小伙伴会参加秋招,有些小伙伴会选择跳槽.猴哥特 ...

  3. python程序员面试算法宝典pdf-Python程序员面试笔试宝典

    本书是一本讲解Python程序员面试笔试的百科全书,在写法上,除了讲解如何解答Python程序员面试笔试问题以外,还引入了相关知识点辅以说明,让读者能够更加容易理解.本书将Python程序员面试笔试过 ...

  4. python程序员工作怎样-python程序员怎样在面试过程中展现自己的基本功

    原标题:python程序员怎样在面试过程中展现自己的基本功 当下我国人工智能招聘岗位需求不多,不过后期的发展潜力巨大,而且python程序员的薪资待遇并不比Java程序员的差,Python程序员往往都 ...

  5. Python程序员面试牢记这些,助你闯关成功!

    Python程序员的面试不同于其他的岗位,在面试过程中经常会遇到笔试.面试.复试等环节,面试就如同闯关."闯关"过程中,面试官对于Python开发人员的基础非常看重,那么如何在面试 ...

  6. python程序员怎么面试_Python程序员面试,这些问题你必须提前准备!

    近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重对待的事情,如下是 ...

  7. Python程序员面试必备常用问题答案及解析

    源 | 小象     文 | 水木华章 在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案 ...

  8. python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题

    我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...

  9. Python程序员面试,这些问题你必须提前准备!

     水木华章 小象 近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重 ...

  10. 阿里HR有多敬业,Python程序员:恐怖,晚上11点接到阿里HR面试电话

    晚上11点你在做什么?想必大多数养身派已经入睡或者准备睡觉,习惯熬夜的夜猫子们则刷着手机网上冲浪欲罢不能.这个时间点有电话进来,要么是推销诈骗,要么是真有急事,现在还有一种可能是HR的面试电话.就有一 ...

最新文章

  1. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
  2. 阿里开源Sentinel流控框架基本介绍与简单使用
  3. MimbleWimble系列之协议介绍
  4. Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity
  5. 开发各种信息管理系统的标准演示数据都帮你整理好了,少了录入演示\测试\模拟数据的烦恼了[提供下载]...
  6. vim 多行注释消除注释,多行删除
  7. Jenkins实现Android自动化打包
  8. CentOS7 minimal 安装
  9. 三行情书代码_用三行代码优化您的交易策略
  10. Hadoop3 Hive Spark完整安装与实践
  11. 为什么机油使用后变红_水泥固化剂的使用原理是什么,涂洒后时间为什么要足够长?...
  12. [Android Pro] Android源码编译之Nexus5真机编译
  13. 多主机SSH密钥配置
  14. yacc 简易计算机规则,Lex Yacc 学习笔记(2)- 简单计算器
  15. 微信小程序实现下拉刷新和上拉触底,获取新数据
  16. 基于Thinkphp6+Element的插件化后台管理系统
  17. Chrome浏览器另存为时浏览器假死问题
  18. graphpad饼状图_Graphpad绘制基因散点图
  19. 【蓝桥杯集训·每日一题】AcWing 3777. 砖块
  20. 如何用全国天气预报API接口进行快速开发

热门文章

  1. Linux系统安装DB2数据库详解
  2. OpenCV 图片模糊处理
  3. DirectSound 播放声音杂音问题.
  4. linux 常用脚本
  5. 如何在IDEA上创建一个JSP项目【亲测有效】
  6. jQuery源码解读一
  7. dll文件编写、查看和调用
  8. 离散数学之主析取范式,主合取范式
  9. 从事Java后端开发,要学习哪些知识和技能?
  10. APP性能测试之帧率测试