Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41132
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-11-29 14:51:34

从每一天价格处一分为二,分别计算之前与之后能获得的最大收益,如果比已知最大收益大则更新。如果计算到发现后半部分最大收益为0,可结束循环,说明之后股价一路跌。


点击(此处)折叠或打开

  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int> &prices) {
  4.         // Start typing your C/C++ solution below
  5.         // DO NOT write int main() function
  6.         if(prices.size()<2) return 0;
  7.         int re=0;
  8.         int min1=prices[0];
  9.         int profit1=0;
  10.         int min2=prices[0];
  11.         int profit2=0;
  12.        
  13.         for(int i=0;i<prices.size();i++)
  14.         {
  15.             if(prices[i]<min1) {min1=prices[i];continue;}
  16.             if(prices[i]-min1>profit1) profit1=prices[i]-min1;
  17.             min2=prices[i];
  18.             profit2=0;
  19.             for(int j=i; j<prices.size();j++)
  20.             {
  21.                 if(prices[j]<min2) {min2=prices[j];continue;}
  22.                 if(prices[j]-min2>profit2) profit2=prices[j]-min2;
  23.             }
  24.             if(0==profit2) break;
  25.             if(profit1+profit2>re) re=profit1+profit2;
  26.         }
  27.         return re;
  28.     }
  29. };

阅读(104) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~