2110. 股票平滑下跌階段的數目

中等 數組 數學 雙指針 動態規劃 滑動窗口

思路

只要找到每次遞減一的最長長度,
再一次計算這個長度當中有幾種組合,加入到答案當中即可。

假如現在陣列是 [4,3,2,1][4,3,2,1]
長度為 4 的「平滑下滑階段」共有 1 個,[4,3,2,1][4,3,2,1]
長度為 3 的「平滑下滑階段」共有 2 個,[4,3,2][4,3,2][3,2,1][3,2,1]
長度為 2 的「平滑下滑階段」共有 3 個,[4,3][4,3][3,2][3,2][2,1][2,1]
長度為 1 的「平滑下滑階段」共有 4 個,[4][4][3][3][2][2][1][1]
總共有 (4×3)/2(4\times{3})/2 個「平滑下滑階段」。

程式碼

數學

class Solution {
public:
    long long getDescentPeriods(vector<int>& prices) {
        int n = prices.size();
        long long res = 0, len = 0;
        for(int i = 0; i < n; ++i) {
            ++len;
            if(i == n - 1 || prices[i] - 1 != prices[i + 1]) {
                res += len * (len + 1) / 2;
                len = 0;
            }
        }
        return res;
    }
};
/*
[n, n - 1, ... 1]
1 + 2 + 3 + ... + n = n + 1 * n / 2
*/

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)

顯示設定

背景線條
顯示背景網格線條
懸停發光
滑鼠懸停時顯示霓虹效果
聚光燈
跟隨滑鼠的聚光燈效果
背景透明度
開啟透明玻璃效果
主題顏色
自訂主要顏色