Formatted question description: https://leetcode.ca/all/2110.html

# 2110. Number of Smooth Descent Periods of a Stock (Medium)

You are given an integer array `prices`

representing the daily price history of a stock, where `prices[i]`

is the stock price on the `i`

day.^{th}

A **smooth descent period** of a stock consists of **one or more contiguous** days such that the price on each day is **lower** than the price on the **preceding day** by **exactly** `1`

. The first day of the period is exempted from this rule.

Return *the number of smooth descent periods*.

**Example 1:**

Input:prices = [3,2,1,4]Output:7Explanation:There are 7 smooth descent periods: [3], [2], [1], [4], [3,2], [2,1], and [3,2,1] Note that a period with one day is a smooth descent period by the definition.

**Example 2:**

Input:prices = [8,6,7,7]Output:4Explanation:There are 4 smooth descent periods: [8], [6], [7], and [7] Note that [8,6] is not a smooth descent period as 8 - 6 ≠ 1.

**Example 3:**

Input:prices = [1]Output:1Explanation:There is 1 smooth descent period: [1]

**Constraints:**

`1 <= prices.length <= 10`

^{5}`1 <= prices[i] <= 10`

^{5}

**Similar Questions**:

## Solution 1.

Get the length of each segment that `A[i] == A[i-1] - 1`

. If a segment is of length `len`

, then it contributes `1 + 2 + 3 + ... + len = (1 + len) * len / 2`

subarrays into the answer. For example `[3,2,1]`

has `[3,2,1]`

(1 array of length 3), `[3,2]`

, `[2,1]`

(2 arrays of length 2), `[3]`

, `[2]`

, `[1]`

(3 arrays of length 1), in total `1 + 2 + 3 = 6`

valid subarrays.

```
// OJ: https://leetcode.com/problems/number-of-smooth-descent-periods-of-a-stock/
// Time: O(N)
// Space: O(1)
class Solution {
public:
long long getDescentPeriods(vector<int>& A) {
long long ans = 0, N = A.size();
for (long long i = 0; i < N; ) {
long long len = 1;
++i;
while (i < N && A[i] == A[i - 1] - 1) ++i, ++len;
ans += (1 + len) * len / 2;
}
return ans;
}
};
```

## Discuss

https://leetcode.com/problems/number-of-smooth-descent-periods-of-a-stock/discuss/1635033/C%2B%2B-O(N)-time-one-pass