Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)
题目描述
已知一个数组,第i个元素表示第i天股票的价格,你只能进行一次交易(买卖各一次),设计算法找出最大收益
测试样例
Input: [7, 1, 5, 3, 6, 4]
Output: 5
最大收益 = 6-1 = 5 (不是7-1 = 6,因为先买后卖,7买,1买亏了6)
Input: [7, 6, 4, 3, 1]
Output: 0
最大收益为0
详细分析
初看非常简单,遍历数组,每次选择一个元素,找到这个元素后面的数组的最大值,计算差值,和当前最大收益比较即可,就像这样:
[7,1,5,3,6,4] 当前7,后面最大6,收益-1
[7,1,5,3,6,4] 当前1,后面最大6,收益5
[7,1,5,3,6,4] 当前5,后面最大6,收益1
如此继续找到即可。
不过这种方法会超时,稍微改变一下,现在不止保持最大收益,还保存最低价格,如果当天价格更低,就刷新最小价格(买),同时如果当天价格减去最小价格的收益最大,就刷新最大价格(卖),过程如下:
[7,1,5,3,6,4] minPrice=INT_MAX,maxProfit=0 => minPrice=7,maxProfit=0
[7,1,5,3,6,4] minPrice=7,maxProfit=0 => minPrice=1,maxProfit=0
[7,1,5,3,6,4] minPrice=1,maxProfit=0 => minPrice=1,maxProfit=4
[7,1,5,3,6,4] minPrice=1,maxProfit=4 => minPrice=1,maxProfit=4
[7,1,5,3,6,4] minPrice=1,maxProfit=4 => minPrice=1,maxProfit=5
[7,1,5,3,6,4] minPrice=1,maxProfit=5 => minPrice=1,maxProfit=5
算法实现
- 方法1:Time Limit Exceeded
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0;
for(auto start=prices.begin();start!=prices.end();start++){
int buy = *start;
int sell = *std::max_element(start,prices.end());
if((sell - buy)>profit){
profit = sell-buy;
}
}
return profit;
}
};
- 方法2: Accepted
class Solution{
public:
int maxProfit(vector<int> &prices){
int profit = 0;
int minBuy = std::numeric_limits<int>::max();
for(int i=0;i<prices.size();i++){
//buy it if current price is less than minimum prices yet
if(prices[i]<minBuy){
minBuy = prices[i];
}
//sell it if current profit got optimally
if((prices[i]-minBuy)>profit){
profit = prices[i]-minBuy;
}
}
return profit;
}
};
Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)的更多相关文章
- 30. leetcode 121. Best Time to Buy and Sell Stock
121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...
- leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown
121. Best Time to Buy and Sell Stock 题目的要求是只买卖一次,买的价格越低,卖的价格越高,肯定收益就越大 遍历整个数组,维护一个当前位置之前最低的买入价格,然后每次 ...
- [LeetCode] 121. Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- LeetCode 121. Best Time to Buy and Sell Stock (买卖股票的最好时机)
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- Java for LeetCode 121 Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- leetcode 121. Best Time to Buy and Sell Stock ----- java
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- Python [Leetcode 121]Best Time to Buy and Sell Stock
题目描述: Say you have an array for which the ith element is the price of a given stock on day i. If you ...
- [leetcode]121. Best Time to Buy and Sell Stock 最佳炒股时机
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- LeetCode 121. Best Time to Buy and Sell Stock (stock problem)
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
随机推荐
- 侯捷STL学习(12)--STL相关内容hash+tuple
layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...
- mybatis 动态sql语句(1)
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. ...
- Rename Oracle Managed File (OMF) datafiles in ASM(ZT)
Recently I was asked to rename a tablespace. The environment was Oracle version 11.2.0.3 (both datab ...
- Oracle中REGEXP_SUBSTR函数(字符串转多行)
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...
- SqlServer——事务一进阶之锁的概念(SqlServer技术内幕 T-SQL程序设计 第九章)
一.事务的概念及ACID特性 对于单独一条SQL语句,数据库会隐式的将其作为事务,即该SQL语句要么执行成功,要么失败(相当于不执行),而我们通常说的事务就是将多条SQL语句放在 begin ...
- Struts2 全局结果集-全局result节点设置,package设置abstract=true的实现
转自:https://blog.csdn.net/u013161278/article/details/41855273 如果我们所有的action均有可能跳到相同的页面,则不妨使用全局result. ...
- 监控和安全运维 1.4 nagios安装
1. Nagios 简介是一个开源软件,可以监控网络设备网络流量.Linux/windows主机状态,甚至可以监控打印机它可以运行在Linux上或windows上基于浏览器的web界面方便运维人员查看 ...
- 安装vs2012以后 sql2008不能使用解决办法
出现的错误 (1) 打开控制面板,找到卸载程序,把”MicrosoftSQL Server 2013(2012) Express LocalDB”卸载掉,然后打开SQL Server 配置管理器,就会 ...
- cfree使用cygwin编译程序出现计算机丢失cygwin1.dll解决办法
这种情况多是环境没配好,我的是64位cygwin C:\cygwin64\bin 加入到环境变量中,重打开cfree就可以解决.
- mock SpringMVC 测试控制器方法
从Spring3.2开始 Spring包含了一种mockSpringMVC并针对controller执行http请求的机制 如(该代码选自spring实战4): public void shouldS ...