121. 买卖股票的最佳时机( Best Time to Buy and Sell Stock)
题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
解题思路一:暴力求解法
根据题目我们可以知道,我们知道最大利润“i”-“j”的差值就可以得到结果,所以时间复杂度为O(n*n),空间复杂度为O(1)。以下为源码:
int maxProfit(vector<int>& prices) {
int size=prices.size();
if(size<=)
{
return ;
}
int max=;
for(int i=;i<size-;i++)
{
for(int j=i+;j<size;j++)
{
if(prices[j]-prices[i]>max)
max=prices[j]-prices[i];
}
}
return max;
}
结果是不出意外的超时了。
解题思路二:
暴力求解的思路超时是由于执行了许多没必要的计算过程,我们现在来开辟一下思路。

如上图所示:
最大利润其实在图中找到峰谷和峰顶(峰顶出现在峰谷之后),两者高度就是最大利润。因为主要的限制条件在于峰顶出现在峰谷之后,如果我们确定当前的峰谷,那么之后出现的最高峰就是卖出股票的地方。
当之后出现新的峰谷(记为P)比当前峰谷(current)还低的话,此时的最大利润只有两种可能,一种为当前峰谷和新峰谷出现之后最高顶的差值,一种为新峰谷之后和以后出现峰顶的差值。因此我们需要记录峰谷的值和最大利润,每次出现更低的峰谷,我们就需要更新,因为这时候老的峰谷对后面结果没有影响了。
int maxProfit(vector<int>& prices) {
int size=prices.size();
if(size<=)
{
return ;
}
int min=prices[];
int maxprices=-;
for(int i=;i<size;i++)
{
if(prices[i]<min)
{
min=prices[i];//新的峰谷
}
else
{
if(prices[i]-min>maxprices)
maxprices=prices[i]-min;
}
}
return maxprices;
}
121. 买卖股票的最佳时机( Best Time to Buy and Sell Stock)的更多相关文章
- Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...
- Java实现 LeetCode 121 买卖股票的最佳时机
121. 买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不 ...
- Leetcode——121. 买卖股票的最佳时机
题目描述:买卖股票的最佳时机 题目要求求解能获得最大利润的方式? 可以定一个二维数组 d [ len ] [ 2 ] ,其中d[ i ][ 0 ] 表示前i天可以获得的最大利润:d[ i ][ 1 ] ...
- 每日一题-——LeetCode(121)买卖股票的最佳时机
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润.注意你不能在买入股票前卖出股票 ...
- leetcode 121 买卖股票的最佳时机
题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. ...
- leetcode 121. 买卖股票的最佳时机 JAVA
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...
- 【每天一题】LeetCode 121. 买卖股票的最佳时机
开源地址:点击该链接 题目描述 * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock * 题目描述: * 给定一个数组, ...
- [LeetCode] 121. 买卖股票的最佳时机 ☆(动态规划)
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/xiang-xi-tong-su-de-si-lu- ...
- Leetcode题目121.买卖股票的最佳时机(简单)
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出 ...
- leetcode 121买卖股票的最佳时机I
从下标1开始,维护两个变量,一个是0~i-1中的最低价格low,一个是当前的最高利润res;先更新最高利润,在更新最低价格:应用了贪心算法的基本思想,总是选择买入价格最低的股票,代码如下: 具有最优子 ...
随机推荐
- 帝都之行9day:正式上班第一天
今天是我正式上班的第一天. 面了两天,三家公司,然后周五就去办入职了,我是不是太随便了点,捂脸. 不管怎么说,又要开始上班啦,CRUD的日子又要开始了…… 加油吧!
- 箭头函数中可改变this作用域,回调函数用箭头函数this指向page,自定义事件用箭头函数this指向undefined
1.回调函数中,用箭头函数改变this的作用域 success: (res)=>{ this.setData({ //此时,this指向page页面 ... }) } 2.自定义事件中,如果使用 ...
- vue项目中,点击按钮复制其内容
<el-table-column label="推广链接" align="center"> <template slot-scope=&quo ...
- APP技术选型
- js 获取 touch length
window.addEventListener("touchstart", touchHandler, false); function touchHandler(event){ ...
- Mockito 2 关于打标(stubbing)
请参考下面有关于打标的代码. //You can mock concrete classes, not just interfaces LinkedList mockedList = mock(Lin ...
- 二进制上的数位dpPOJ 3252
Round number POJ - 3252 题目大意:一个"round number" 数的定义是,将它转化成2进制后,0的个数大于等于1的个数,要求的就是在[s,f]范围内& ...
- angularJS <input type="file> 图片的base64编码
talk is cheap show me the code <input type="file" id="file" name="file&q ...
- postgresql-基础-1
概述 层状关系 网状关系 关系型数据库 关系型数据库 元祖:代表一行 属性:代表一列 主码:唯一确定一个元组的属性组,即主键 域:属性的取值范围 分量:元组中的一个属性值,即某一行 ...
- HLS协议解析
1. 综述 HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些.HLS 协议由三部分组成:HTTP.M3U8.TS.这三部分中,HTT ...