力扣121. 买卖股票的最佳时机(后缀后)

Problem: 121. 买卖股票的最佳时机

文章目录

  • 题目描述
  • 思路及解法
  • 复杂度
  • Code

题目描述

力扣121. 买卖股票的最佳时机(后缀后)_第1张图片力扣121. 买卖股票的最佳时机(后缀后)_第2张图片

思路及解法

在本题中我们为避免暴力双循环可以采取后缀和的方式,具体的:

1.统计后缀后:在定义一个和prices等大的数组max用于记录后缀和,然后循环从prices数组后开始遍历,如果当prices[i]大于max[i],则更新当前max[i]处的值为prices[i],否则max[i]还是为上一阶段的最大值;
2.找出最大差值:定义一个用于记录差值的int变量result,同时正向遍历prices若max[i] - prices[i] > result则更新result为max[i] - prices[i]

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为数组prices的大小

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {
public:
    /**
     * Suffix sum
     * @param prices
     * @return int
     */
    int maxProfit(vector<int> &prices) {
        int n = prices.size();
        vector<int> max(n);
        int curMax = 0;
        //Statistical suffix sum
        for (int i = n - 1; i >= 0; --i) {
            max[i] = curMax;
            if (prices[i] > curMax) {
                curMax = prices[i];
            }
        }
        int result = 0;
        for (int i = 0; i < n; ++i) {
            if (max[i] - prices[i] > result) {
                result = max[i] - prices[i];
            }
        }
        return result;
    }
};

你可能感兴趣的:(力扣题目,leetcode,算法,职场和发展)