Skip to content

Commit 79b00f1

Browse files
authored
Update sum-of-total-strength-of-wizards.py
1 parent ae21c7b commit 79b00f1

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

Python/sum-of-total-strength-of-wizards.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
11
# Time: O(n)
22
# Space: O(n)
33

4-
# mono stack, prefix sum
4+
# mono stack, prefix sum, optimized from solution2
55
class Solution(object):
6+
def totalStrength(self, strength):
7+
"""
8+
:type strength: List[int]
9+
:rtype: int
10+
"""
11+
MOD = 10**9+7
12+
curr = 0
13+
prefix = [0]*(len(strength)+1)
14+
for i in xrange(len(strength)):
15+
curr = (curr+strength[i])%MOD
16+
prefix[i+1] = (prefix[i]+curr)%MOD
17+
stk, result = [-1], 0
18+
for i in xrange(len(strength)+1):
19+
while stk[-1] != -1 and (i == len(strength) or strength[stk[-1]] >= strength[i]):
20+
x, y, z = stk[-2]+1, stk.pop(), i-1
21+
# assert(all(strength[j] >= strength[y] for j in xrange(x, y+1)))
22+
# assert(all(strength[j] > strength[y] for j in xrange(y+1, z+1)))
23+
result = (result+(strength[y]*((y-x+1)*(prefix[z+1]-prefix[y])-(z-y+1)*(prefix[y]-prefix[max(x-1, 0)]))))%MOD
24+
stk.append(i)
25+
return result
26+
27+
28+
# Time: O(n)
29+
# Space: O(n)
30+
# mono stack, prefix sum
31+
class Solution2(object):
632
def totalStrength(self, strength):
733
"""
834
:type strength: List[int]

0 commit comments

Comments
 (0)