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;先更新最高利润,在更新最低价格:应用了贪心算法的基本思想,总是选择买入价格最低的股票,代码如下: 具有最优子 ...
随机推荐
- 【杂题】cf1041fF. Ray in the tube
死于没有处理边界 题目描述 题目大意 在两面镜子上各选定一个整数位置的点 A 与 B,并从其中一个点向另一个射出一条光线,使得接收到光线的传感器数量尽可能的多.传感器不重叠. 题目分析 我们来初步考虑 ...
- 持久化存储与HTTP缓存
本文主要学习一下一些高级的HTTP知识,例如Session LocalStorage Cache-Control Expires ETag 其实主要就是涉及到了持久化存储与缓存的技术 在此之前已经学习 ...
- 数据管理必看!Kendo UI for jQuery过滤器概述
Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...
- vue 创建项目 create和init
vue init是vue-cli2.x的初始化方式,可以使用github上面的一些模板来初始化项目,webpack是官方推荐的标准模板名. 示例:vue init webpack myproject ...
- Elasticsearch:运用shard filtering来控制索引分配给哪个节点
在我们的实际部署中,我们的各个node(节点)的能力是不一样的.比如有的节点的计算能力比较强,而且配有高性能的存储,速度也比较快,同时我们可能有一些node的能力稍微差一点,比如计算能力及存储器的速度 ...
- Jenkins-邮件模板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SQL中where in的用法
首先我们要知道where是什么:一个判断符.在SQL操作中,控制只选择指定的行. in的其实归类于特殊的比较运算符 expr1 between expr2 and expr3:表示expr1的值在ex ...
- (考试大整理~)Xxy 的车厢调度
这一题我以前研究过哈哈哈~ (train.cpp/c/pas) Description 有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入,再从 B 方向驶出,同时它的车厢可以 ...
- 阿sa
# jieba库概述 .jieba是优秀的中文分词第三方库.需要额外安装. pip install jieba # jieba库三种分词模式 精确模式:把文本精确的切分开,不存在冗余单词. 全模式:把 ...
- 顺序表应用2:多余元素删除之建表算法(SDUT 3325)
题解: 每次询问一遍,如果已经存在就不用插入表中了. #include <stdio.h> #include <stdlib.h> #include <string.h& ...