부분 배열 최소의 leetcode907 합

아이디어 :

각 디지털 A [i]를 들어, 단조롭게 스택 발견 [I]의 최소 간격의 수와 누적 된 결과를 승산의 모든. O (N)의 시간 복잡도.

구현 :

1  솔루션
 2-  {
 3  공개 :
 4      의 INT sumSubarrayMins (벡터 < INT > & A)
 5      {
 6          INT 입술 = 0 ;
7          스택 < INT > 과 같다
8          INT의 N = A.size ();
9          CONST  INT MOD 1E9 + = 7 ;
(10)          에 대한이 ( 값 int = 1을 0 ; i가 ++] i가 N < )
 11          {
 12              잠시(! st.empty () && A [I] < A [st.top ()])
 13              {
 14                  INT의 TMP = st.top (); st.pop ();
15                  INT 마지막 = st.empty ()? - 1 : st.top ();
16                  입술 = (입술 + (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              입술 = (입술 + (N - TMP) * (TMP - 최종) MOD % * A [TMP] % MOD) % MOD;
25          }
 26          리턴 입술;
27      }
 28 }

추천

출처www.cnblogs.com/wangyiming/p/11493402.html