<每日一题>算法导论:最大股票收益
来源:互联网 发布:广州蛋糕店哪家好 知乎 编辑:程序博客网 时间:2024/05/17 01:57
一.抽象:
给定一个数组,求出数组中两数之差的最大值,被减数下标大于减数
二.方法:
1.分治法:
a.将数组分成左右两部分
b.分别求出两部分的最大值,最小值,以及下标大的数与下标小的数之差的最大值。
c.合并两部分的结果
时间为O(nlogn)
2.转化为最大子数组和问题:
a.先求出数组的前一个数与后一个数之差,组成新的数组
b.求新数组的最大子数组和
(原理:假设原数组(长度为n)为l[0…n-1],新数组为d[0…n-2],其中d[i]=l[i+1]-l[i],当求出d的最大子数组为d[x…y]时,则有:
l[x+1]-l[x] + l[x+2]-l[x+1] … l[y+1]-l[y] = l[y+1]-l[x]
也就求得原数组两数之差的最大值)
时间为O(n)
三.代码(python ):
1.分治法:
def get_max_diff_partition(l,start,end) mid=int((start+end)/2) #Max对应数组从start到end的最大值 #Min对应数组从start到end的最小值 #d_max对应数组从start到end的下标大的数与下标小的数之差的最大值 if start==end: Max=l[start] Min=l[start] d_max=0 return Min,Max,d_max Max_l,Min_l,d_max_l = get_max_diff_partition(l,start,mid) Max_r,Min_r,d_max_r = get_max_diff_partition(l,mid+1,end) #合并左右两个数组 d_max_mid = Max_r - Min_l d_max = max(d_max_l,d_max_mid,d_max_r) Min=min(Min_l,Min_r) Max=max(Max_l,Max_r) return Min,Max,d_max
2.最大子数组法:
def get_diff_max_best(l): length=len(l) #求出前一天与后一天的差值 diff=[] for i in range(length-1): diff.append(l[i+1]-l[i]) max_sum=0 cur_sum=0 for d in diff: if cur_sum+d>0: cur_sum+=d else: cur_sum=0 if cur_sum>max_sum: max_sum=cur_sum return max_sum
阅读全文
0 0
- <每日一题>算法导论:最大股票收益
- 算法导论之求股票最大收益
- 第四章 最大子数组问题(股票最大收益) C++实现 算法导论
- 股票什么时候买进什么时候卖出收益最大----求最大子数组(算法导论第四章 4.1-3)
- 【数字题1】股票的最大收益
- 股票,最大收益
- 股票收益最大
- 如何买卖股票以获得最大收益 java算法
- 买卖股票收益最大问题
- 小米笔试-股票最大收益(动态规划)
- java计算股票一段时间内最大收益
- 【算法导论学习-27】动态规划经典问题01:钢条切割的最大收益
- 股票收益
- 股票最大收益问题及数组最大差值问题
- 最大股票收益问题(数组最大差问题)
- 算法导论 26章 最大流(一)
- 每日一算法:最大公因数、最小公倍数、因式分解
- 找出买卖股票的最大收益及其时间
- 以三亚机场开展学习党的十九大精神系列活动反击海航集团债务违约传闻
- 【Scikit-Learn 中文文档】十二:决策树
- 冒泡算法 相邻下标两两比较
- 如何判断Fragment是否可见
- Spring Cloud Eureka 服务注册与发现中心(一)
- <每日一题>算法导论:最大股票收益
- AMOS分析原理:结构方程模型无法收敛的原因
- VS 2013 本地IIS调试 解决方案
- 【Scikit-Learn 中文文档】交叉分解
- 【Scikit-Learn 中文文档】十三:集成方法
- 【目标检测】RCNN算法详解(下)
- Numpy快速入门教程(三):SciPy,Matplotlib
- Java HashMap的工作原理
- ubuntu+cuda+opencv安装