サブアレイ[最小値の合計leetcode907

アイデア:

各デジタルA [i]のために、単調スタック実測値[i]が最小間隔の数、累積結果を乗算のすべてについて。O(N)の時間複雑。

実装:

1  クラスソリューション
 2  {
 3  公共4      int型 sumSubarrayMins(ベクトル< INT >&A)
 5      {
 6          INT RES = 0 7          スタック< 整数 > ST;
8          INT N = A.size()。
9          CONST  INT MOD = 1E9 + 7 10          のためにint型 I = 0 ; iがN <I ++は11          {
 12              ながら(!st.empty()&& A [i]が< [st.top()])
 13              {
 14                  INT TMP = st.top()。st.pop();
15                  INT最後= st.empty()?- 1 :st.top();
16の                  RES =(RES +(I - TMP)*(TMP -最後)%MOD * A [TMP]%MOD)%MOD。
17              }
 18              st.push(I)。
19          }
 20          ながら(!st.empty())
 21          {
 22              INT TMP = st.top()。st.pop();
23              INT最後= st.empty()?- 1 :st.top();
24の              RES =(RES +(N - TMP)*(TMP -最後)%MOD * A [TMP]%MOD)%MOD。
25          }
 26の         リターンRES。
27      }
 28 }

おすすめ

転載: www.cnblogs.com/wangyiming/p/11493402.html