62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
/*
|
|
* @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
|
|
|
|
*/
|