Welcome to Subscribe On Youtube
2110. Number of Smooth Descent Periods of a Stock
Description
You are given an integer array prices
representing the daily price history of a stock, where prices[i]
is the stock price on the ith
day.
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: 7 Explanation: 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: 4 Explanation: 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: 1 Explanation: There is 1 smooth descent period: [1]
Constraints:
1 <= prices.length <= 105
1 <= prices[i] <= 105
Solutions
-
class Solution { public long getDescentPeriods(int[] prices) { long ans = 0; int n = prices.length; for (int i = 0, j = 0; i < n; i = j) { j = i + 1; while (j < n && prices[j - 1] - prices[j] == 1) { ++j; } int cnt = j - i; ans += (1L + cnt) * cnt / 2; } return ans; } }
-
class Solution { public: long long getDescentPeriods(vector<int>& prices) { long long ans = 0; int n = prices.size(); for (int i = 0, j = 0; i < n; i = j) { j = i + 1; while (j < n && prices[j - 1] - prices[j] == 1) { ++j; } int cnt = j - i; ans += (1LL + cnt) * cnt / 2; } return ans; } };
-
class Solution: def getDescentPeriods(self, prices: List[int]) -> int: ans = 0 i, n = 0, len(prices) while i < n: j = i + 1 while j < n and prices[j - 1] - prices[j] == 1: j += 1 cnt = j - i ans += (1 + cnt) * cnt // 2 i = j return ans
-
func getDescentPeriods(prices []int) (ans int64) { n := len(prices) for i, j := 0, 0; i < n; i = j { j = i + 1 for j < n && prices[j-1]-prices[j] == 1 { j++ } cnt := j - i ans += int64((1 + cnt) * cnt / 2) } return }
-
function getDescentPeriods(prices: number[]): number { let ans = 0; const n = prices.length; for (let i = 0, j = 0; i < n; i = j) { j = i + 1; while (j < n && prices[j - 1] - prices[j] === 1) { ++j; } const cnt = j - i; ans += Math.floor(((1 + cnt) * cnt) / 2); } return ans; }