2110: 股票平滑下跌阶段的数目
示例 1 的 prices=[3,2,1,4],按照子数组的右端点下标分组,有这些连续递减子数组:
- 右端点 i=0:[3]
- 右端点 i=1:[3,2],[2]
- 右端点 i=2:[3,2,1],[2,1],[1]
- 右端点 i=3:[4]
思路:在遍历 prices 的同时,统计当前这段连续递减的长度 last_d。
long long ans = 1; // 第一个元素自己算一个
-
1 <= prices.length <= 10^5class Solution {
public:
long long getDescentPeriods(vector<int>& prices) {
int n=prices.size(),last_d=1; // 当前连续平滑段长度(≥1)
long long ans=1;
for(int i=1;i<n;i++){
if(prices[i-1]-prices[i]==1) last_d++;
else last_d=1;
ans+=last_d;
}return ans; }};