121. 买卖股票的最佳时机( Best Time to Buy and Sell Stock)
2024-09-05 12:52:53
题目地址: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;
}
最新文章
- 一步一步将Vim打造成C++超级IDE
- Java--Semaphore控制并发线程数量
- UVALive 6656 Watching the Kangaroo --二分
- 各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!!
- NYOJ-655 光棍的YY AC 分类: NYOJ 2013-12-29 19:24 224人阅读 评论(0) 收藏
- 编译boost (windows msvc14)
- 请求(Request)的参数(Parameter)里包含特殊字符(#等)的正确处理方式
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
- ios 屏幕方向的设置
- 宠物收养场 Treap
- 最详细的cookie和浏览隐私之间的关系
- js 数据类型具体分析
- HDU-1260.Tickets(简单线性DP)
- 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序
- 数电——全减器分析(用74HC138设计提示)
- Slava and tanks 877C
- MySQL Cluster
- ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
- Alpha冲刺一(1/10)
- sublime python运行插件
热门文章
- java 枚举类(简单使用)
- Oracle之:Function :numberToDate()
- BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)
- 【Python之路】特别篇--Redis
- canvas风景时钟
- jsPDF – 基于 HTML5 的强大 PDF 生成工具
- centos后台运行python程序
- MySQL_(Java)使用JDBC创建用户名和密码校验查询方法
- ETL-拉链算法-1
- ESPCMS的CSRF添加管理员账号