题目地址: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;
}

最新文章

  1. 一步一步将Vim打造成C++超级IDE
  2. Java--Semaphore控制并发线程数量
  3. UVALive 6656 Watching the Kangaroo --二分
  4. 各种工具使用手册:http://www.itshouce.com.cn/linux/linux-tcpdump.html 关于tcpdump!!!!
  5. NYOJ-655 光棍的YY AC 分类: NYOJ 2013-12-29 19:24 224人阅读 评论(0) 收藏
  6. 编译boost (windows msvc14)
  7. 请求(Request)的参数(Parameter)里包含特殊字符(#等)的正确处理方式
  8. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
  9. ios 屏幕方向的设置
  10. 宠物收养场 Treap
  11. 最详细的cookie和浏览隐私之间的关系
  12. js 数据类型具体分析
  13. HDU-1260.Tickets(简单线性DP)
  14. 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序
  15. 数电——全减器分析(用74HC138设计提示)
  16. Slava and tanks 877C
  17. MySQL Cluster
  18. ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
  19. Alpha冲刺一(1/10)
  20. sublime python运行插件

热门文章

  1. java 枚举类(简单使用)
  2. Oracle之:Function :numberToDate()
  3. BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)
  4. 【Python之路】特别篇--Redis
  5. canvas风景时钟
  6. jsPDF – 基于 HTML5 的强大 PDF 生成工具
  7. centos后台运行python程序
  8. MySQL_(Java)使用JDBC创建用户名和密码校验查询方法
  9. ETL-拉链算法-1
  10. ESPCMS的CSRF添加管理员账号