《python程序员面试宝典(陈屹)》chapter1 技术面试方法论
情境描述:
股票信息包括每天交易的最高价、最低价以及开盘价。设计算法,根据给定的股价走势信息,决定买入和卖出策略,保证交易获得的利润最大化
方法一:暴力枚举法
# 定义股票开盘价数组
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 技术面试方法论相关推荐
- python程序员面试宝典 陈屹_程序员面试宝典 - 总结
1 类型转换 当执行算术运算时,操作数的类型如果不同,就会发生转换,数据类型一般朝着浮点精度高.长度更长的方向转换,整数型如果转换为signed不会丢失信息,就转换为signed,否则转换为unsig ...
- python程序员面试宝典 陈屹_Python 面试宝典
步入 9 月,徐徐的秋风给酷热的天气带来丝丝凉意.同时,也吹来一股招聘高潮.俗话说"金九银十",每年的 9.10 月都是招聘高潮.有些小伙伴会参加秋招,有些小伙伴会选择跳槽.猴哥特 ...
- python程序员面试算法宝典pdf-Python程序员面试笔试宝典
本书是一本讲解Python程序员面试笔试的百科全书,在写法上,除了讲解如何解答Python程序员面试笔试问题以外,还引入了相关知识点辅以说明,让读者能够更加容易理解.本书将Python程序员面试笔试过 ...
- python程序员工作怎样-python程序员怎样在面试过程中展现自己的基本功
原标题:python程序员怎样在面试过程中展现自己的基本功 当下我国人工智能招聘岗位需求不多,不过后期的发展潜力巨大,而且python程序员的薪资待遇并不比Java程序员的差,Python程序员往往都 ...
- Python程序员面试牢记这些,助你闯关成功!
Python程序员的面试不同于其他的岗位,在面试过程中经常会遇到笔试.面试.复试等环节,面试就如同闯关."闯关"过程中,面试官对于Python开发人员的基础非常看重,那么如何在面试 ...
- python程序员怎么面试_Python程序员面试,这些问题你必须提前准备!
近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重对待的事情,如下是 ...
- Python程序员面试必备常用问题答案及解析
源 | 小象 文 | 水木华章 在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案 ...
- python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题
我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...
- Python程序员面试,这些问题你必须提前准备!
水木华章 小象 近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重 ...
- 阿里HR有多敬业,Python程序员:恐怖,晚上11点接到阿里HR面试电话
晚上11点你在做什么?想必大多数养身派已经入睡或者准备睡觉,习惯熬夜的夜猫子们则刷着手机网上冲浪欲罢不能.这个时间点有电话进来,要么是推销诈骗,要么是真有急事,现在还有一种可能是HR的面试电话.就有一 ...
最新文章
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
- 阿里开源Sentinel流控框架基本介绍与简单使用
- MimbleWimble系列之协议介绍
- Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity
- 开发各种信息管理系统的标准演示数据都帮你整理好了,少了录入演示\测试\模拟数据的烦恼了[提供下载]...
- vim 多行注释消除注释,多行删除
- Jenkins实现Android自动化打包
- CentOS7 minimal 安装
- 三行情书代码_用三行代码优化您的交易策略
- Hadoop3 Hive Spark完整安装与实践
- 为什么机油使用后变红_水泥固化剂的使用原理是什么,涂洒后时间为什么要足够长?...
- [Android Pro] Android源码编译之Nexus5真机编译
- 多主机SSH密钥配置
- yacc 简易计算机规则,Lex Yacc 学习笔记(2)- 简单计算器
- 微信小程序实现下拉刷新和上拉触底,获取新数据
- 基于Thinkphp6+Element的插件化后台管理系统
- Chrome浏览器另存为时浏览器假死问题
- graphpad饼状图_Graphpad绘制基因散点图
- 【蓝桥杯集训·每日一题】AcWing 3777. 砖块
- 如何用全国天气预报API接口进行快速开发