博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 【 Best Time to Buy and Sell Stock 】python 实现
阅读量:6162 次
发布时间:2019-06-21

本文共 1115 字,大约阅读时间需要 3 分钟。

思路

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

 

代码:oj测试代码 Runtime: 111 ms

1 class Solution: 2     # @param prices, a list of integer 3     # @return an integer 4     def maxProfit(self, prices): 5         # none case or one element case 6         if prices is None or len(prices)<2 : 7             return 0 8         # dp 9         min_buy = 010         max_profit = 011         for i in range(1,len(prices)):12             if prices[i]

 

思路

典型的动态规划题目。

跟求最小子集的和这道题()类似。

个人认为这类题目的精髓在于“在每一步,我们维护两个变量,一个是全局最优,就是到当前元素为止最优的解是,一个是局部最优,就是必须包含当前元素的最优的解”。

对于这道题来说,有一个小梗需要想明白:如果prices[i]就是到i为止最小的值,那么prices[i]-prices[min_buy]不是等于0了么?

请注意,回顾动态规划的规则:一定要包含当前元素的最优解。既然当前元素已经是历史最小值了,那么还非要包含当前元素的最优解,不正是他自身减去自身么?

维护一个max_profit(最大利润),一个min_buy(历史最低点)。

1. 如果当前的prices[i]小于prices[min_buy],则更新min_buy。

2. 取prices[i]-prices[min_buy]和max_profit中较大的一个,作为max_profit的值。

最后返回max_profit即可。

转载于:https://www.cnblogs.com/xbf9xbf/p/4264748.html

你可能感兴趣的文章
使用addChildViewController手动控制UIViewController的切换
查看>>
Android Fragment应用实战
查看>>
SQL Server查询死锁并KILL
查看>>
内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
查看>>
委托到Lambda的进化: ()=> {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
查看>>
apache 伪静态 .htaccess
查看>>
unity3d 截屏
查看>>
ASP.NET MVC学习之控制器篇
查看>>
MongoDB ServerStatus返回信息
查看>>
分析jQuery源码时记录的一点感悟
查看>>
android中的textview显示汉字不能自动换行的一个解决办法
查看>>
程序局部性原理感悟
查看>>
Golang中WaitGroup、Context、goroutine定时器及超时学习笔记
查看>>
css H5端多行文本实现省略号
查看>>
leetcode15 3Sum 从数组中找到三个整数,它们的和为0
查看>>
UIView 动画进阶
查看>>
如何在Kubernetes上运行Apache Flink
查看>>
GitHub推出Scientist,帮助开发者重构关键路径代码
查看>>
使用C#来面向GPU编程
查看>>
GitHub Draft Pull请求支持新的协作流程
查看>>