Skip to content

Commit b0e09a1

Browse files
committed
Time: 507 ms (38.82%), Space: 26.3 MB (48.24%) - LeetHub
1 parent a8cbcf2 commit b0e09a1

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# time complexity: O(n)
2+
# space complexity: O(n)
3+
from collections import deque
4+
from typing import List
5+
6+
7+
class Solution:
8+
def countPartitions(self, nums: List[int], k: int) -> int:
9+
MOD = 10**9 + 7
10+
n = len(nums)
11+
12+
dp = [0] * (n+1)
13+
prefix = [0] * (n+1)
14+
15+
dp[0] = 1
16+
prefix[0] = 1
17+
18+
queueMax = deque()
19+
queueMin = deque()
20+
21+
count = 0
22+
for i in range(1, n+1):
23+
while queueMax and nums[queueMax[-1]] <= nums[i-1]:
24+
queueMax.pop()
25+
queueMax.append(i-1)
26+
27+
while queueMin and nums[queueMin[-1]] >= nums[i-1]:
28+
queueMin.pop()
29+
queueMin.append(i-1)
30+
31+
while nums[queueMax[0]] - nums[queueMin[0]] > k:
32+
if queueMax[0] == count:
33+
queueMax.popleft()
34+
if queueMin[0] == count:
35+
queueMin.popleft()
36+
count += 1
37+
38+
dp[i] = (prefix[i-1] - (prefix[count-1] if count > 0 else 0)) % MOD
39+
prefix[i] = (prefix[i-1] + dp[i]) % MOD
40+
41+
return dp[n]
42+
43+
44+
nums = [9, 4, 1, 3, 7]
45+
k = 4
46+
print(Solution().countPartitions(nums, k))
47+
nums = [3, 3, 4]
48+
k = 0
49+
print(Solution().countPartitions(nums, k))

0 commit comments

Comments
 (0)