买卖股票的最佳机会II(力扣122)

打印 上一主题 下一主题

主题 988|帖子 988|积分 2964

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这道题有两个留意点,一是我们永远都只能持有一支股票,二是一天之中只能在买股票和卖股票中二选一。因此我们至少要从第二天开始才有利润收入,也就是每两天是一个交易单元,这一点后面要用到。第一次做这道题一般都是如许想,选一个价格低的一天买入,再选个价格高的一天卖,再选一个低的买入.....循环反复,但我们根本确定不了多高算高,多低算低。不妨换一种思考方式,举个例子:我们第一天买股票,第三天卖股票,期间获得的利润可以拆成第一天到第二天的利润与第二天到第三天的利润之和,也就是将一次买卖拆成多个交易单元。于是贪心的点就出来了,我们只有在当前交易单元的利润为正时,才将其算入我们终极买卖股票的利润当中。局部最优,也就是只有当交易单元利润为正才算入总利润,全局最优就是末了得到的利润是我们能获取的最大值。各人可以结合我下面的代码及详细注释明白此题。
代码及详细注释如下:
  1. class Solution {
  2. public:
  3.     int maxProfit(vector<int>& prices) {
  4.         int sum = 0;
  5.         int day_price;//每个交易单元的利润
  6.         //从第二天开始才有利润,于是i从1开始
  7.         for(int i = 1;i < prices.size();i++){
  8.             //计算交易单元利润
  9.             day_price = prices[i] - prices[i - 1];
  10.             //当利润为正才算入总利润中
  11.             if(day_price > 0){
  12.                  sum += day_price;
  13.             }
  14.         }
  15.         return sum;
  16.     }
  17. };
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表