[2110] 股票平滑下跌阶段的数目

This commit is contained in:
kazusa 2025-12-15 15:30:58 +08:00
parent fc3c20df6b
commit 751db3ab93
1 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,61 @@
/*
* @lc app=leetcode.cn id=2110 lang=javascript
* @lcpr version=
*
* [2110] 股票平滑下跌阶段的数目
*/
// @lc code=start
/**
* @param {number[]} prices
* @return {number}
*/
var getDescentPeriods = function (prices) {
// 使用双指针圈定连续的段,当段不连续后,计算连续段所有符合的子段数,重新寻找连续段
let [left, right] = [0, 0];
let ans = 0;
while (right <= prices.length - 1) {
if (right == left) {
// 重置后的位置
right++;
continue;
}
// 不满足连续段
if (right >= 1 && prices[right - 1] - prices[right] != 1) {
// 找出上一个连续段的个数
let num = right - 1 - left + 1;
// 计算连续段所有符合的子段数
ans += (num * (num + 1)) / 2;
// 重置连续段左右指针
left = right;
continue;
}
right++;
}
right = prices.length - 1;
// 最后一次计算
if (prices[right - 1] - prices[right] != 1) {
ans += 1;
} else {
let num = right - left + 1;
ans += (num * (num + 1)) / 2;
}
return ans;
};
getDescentPeriods([3,2,1,4]);
// @lc code=end
/*
// @lcpr case=start
// [3,2,1,4]\n
// @lcpr case=end
// @lcpr case=start
// [8,6,7,7]\n
// @lcpr case=end
// @lcpr case=start
// [1]\n
// @lcpr case=end
*/