LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
2015-07-27 13:32
274 查看
题意:给定一个序列,第i个元素代表第i天这支股票的价格,问在最佳时机买入和卖出能赚多少钱?只买一次,且仅1股,假设本钱无限。
思路:要找一个最低价的时候买入,在最高价的时候卖出利润会最大。但是时间是不能冲突的,比如说在明天买入,今天卖出。因此,对于今天的价格,应该要找到今天之前的该股的最低价,买入,今天卖出。
其实就是要为序列中的一个元素A[k],找到另一个元素A[e],位置满足e<k,结果使得A[k]-A[e]最大。
用动态规划解决,从左扫起,遇到一个元素就更新当前最小值,再用当前元素去减这个最小值。扫完就知道结果了。
AC代码
思路:要找一个最低价的时候买入,在最高价的时候卖出利润会最大。但是时间是不能冲突的,比如说在明天买入,今天卖出。因此,对于今天的价格,应该要找到今天之前的该股的最低价,买入,今天卖出。
其实就是要为序列中的一个元素A[k],找到另一个元素A[e],位置满足e<k,结果使得A[k]-A[e]最大。
用动态规划解决,从左扫起,遇到一个元素就更新当前最小值,再用当前元素去减这个最小值。扫完就知道结果了。
class Solution { public: int maxProfit(vector<int>& prices) { int small=2147483647, ans=0; for(int i=0; i<prices.size(); i++) { small=min(small, prices[i]); //找到i之前的最小值 ans=max( prices[i]-small, ans ); } return ans; } };
AC代码
相关文章推荐
- linux初学(九)之linux文件系统
- 九度oj 1124
- linux初学(八)之使用fdisk进行磁盘管理
- poj 2251 Dungeon Master(三维BFS)(中等)
- [单调队列] hdu 3415 Max Sum of Max-K-sub-sequence
- 【leetcode-16】3Sum Closest(java)
- 提高ios开发效率
- _CrtIsValidHeapPointer 跨dll接口参数数据传递问题
- 7.27计划
- javascript中的闭包
- Poj 1201 差分约束问题 详解
- hdu 3008 Warcraft
- HDU 5074 Hatsune Miku (动态规划)
- Spark Streaming 流计算优化记录(1)-背景介绍
- 2.朴素贝叶斯Naive Bayes
- mac shell终端编辑命令行快捷键——行首行尾
- 随机数
- c++获取系统d当前时间
- Linux文件的软链接和硬链接
- hdu 5312 Sequence