微信扫一扫打赏支持

风口的猪-中国牛市

风口的猪-中国牛市

题目描述

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100
示例1

输入

3,8,5,1,7,8

输出

12

 

枚举:由外到里,一点点把所有的情况都枚举出来,而且把实际问题抽象为数学问题

把问题抽象为取数问题即可

 情况很多的枚举,把问题分细,就好枚举了。

 1 class Solution {
 2 public:
 3     /**
 4      * 计算你能获得的最大收益
 5      * 
 6      * @param prices Prices[i]即第i天的股价
 7      * @return 整型
 8      */
 9     /*
10     枚举所有的买入点和卖出点
11     有一个要求
12     其实就是在一串数中选四个数
13     并且第二个大于第一个
14     第四个大于第三个
15     */
16     int calculateMax(vector<int> prices) {
17         //一次都不买
18         int ans=0;
19         //买一次
20         for(int i=0;i<prices.size();i++){
21             for(int j=i+1;j<prices.size();j++){
22                 if(prices[j]-prices[i]>ans){
23                     ans=prices[j]-prices[i];
24                 }
25             }
26         }
27         //买两次
28         for(int i1=0;i1<prices.size();i1++){
29             for(int i2=i1+1;i2<prices.size();i2++){
30                 for(int i3=i2+1;i3<prices.size();i3++){
31                     for(int i4=i3+1;i4<prices.size();i4++){
32                         if(prices[i4]-prices[i3]+prices[i2]-prices[i1]>ans){
33                             ans=prices[i4]-prices[i3]+prices[i2]-prices[i1];
34                         }
35                     }
36                 }
37             }
38         }
39         return ans;
40     }
41 };

 

posted @ 2017-10-26 15:10  范仁义  阅读(445)  评论(0编辑  收藏  举报