class Solution {
public:
long long getDescentPeriods(vector<int>& prices) {
}
};
2110. 股票平滑下跌阶段的数目
给你一个整数数组 prices
,表示一支股票的历史每日股价,其中 prices[i]
是这支股票第 i
天的价格。
一个 平滑下降的阶段 定义为:对于 连续一天或者多天 ,每日股价都比 前一日股价恰好少 1
,这个阶段第一天的股价没有限制。
请你返回 平滑下降阶段 的数目。
示例 1:
输入:prices = [3,2,1,4] 输出:7 解释:总共有 7 个平滑下降阶段: [3], [2], [1], [4], [3,2], [2,1] 和 [3,2,1] 注意,仅一天按照定义也是平滑下降阶段。
示例 2:
输入:prices = [8,6,7,7] 输出:4 解释:总共有 4 个连续平滑下降阶段:[8], [6], [7] 和 [7] 由于 8 - 6 ≠ 1 ,所以 [8,6] 不是平滑下降阶段。
示例 3:
输入:prices = [1] 输出:1 解释:总共有 1 个平滑下降阶段:[1]
提示:
1 <= prices.length <= 105
1 <= prices[i] <= 105
原站题解
cpp 解法, 执行用时: 116 ms, 内存消耗: 90.9 MB, 提交时间: 2023-01-09 15:28:49
class Solution { public: long long getDescentPeriods(vector<int>& prices) { int n = prices.size(); long long res = 1; // 平滑下降阶段的总数,初值为 dp[0] int prev = 1; // 上一个元素为结尾的平滑下降阶段的总数,初值为 dp[0] // 从 1 开始遍历数组,按照递推式更新 prev 以及总数 res for (int i = 1; i < n; ++i) { if (prices[i] == prices[i-1] - 1) { ++prev; } else { prev = 1; } res += prev; } return res; } };
python3 解法, 执行用时: 156 ms, 内存消耗: 24.2 MB, 提交时间: 2023-01-09 15:28:15
class Solution: def getDescentPeriods(self, prices: List[int]) -> int: n = len(prices) res = 1 # 平滑下降阶段的总数,初值为 dp[0] prev = 1 # 上一个元素为结尾的平滑下降阶段的总数,初值为 dp[0] # 从 1 开始遍历数组,按照递推式更新 prev 以及总数 res for i in range(1, n): if prices[i] == prices[i-1] - 1: prev += 1 else: prev = 1 res += prev return res