795. Number of Subarrays with Bounded Maximum——python——dp
题目分析:连续子序列,出现连续子序列,解题思路一般是考虑每个被包含的情况。因为必须连续。
class Solution(object):
def kthSmallest(self, A, L, R):
if not A: return 0
dp = [0 for _ in range(len(A))]
dp[0] = 1 if L <= A[0] <= R else 0
for i in range(1, len(A)): # 包含到a[i]的所有情况
if A[i] > R: # 包含A[i]的没有
continue
if A[i] < L: # 包含A[i]的和前一个一样,就是在之前每一个最后append A[i]就可以了
dp[i] = dp[i - 1]
else:
j = i - 1 # 本身是一个合格的子集
# 处理遗漏的情况
while j >= 0 and A[j] < L:
j -= 1
dp[i] = dp[i - 1] + i - j # 因为i-j不能组成一个独立的subarray,因为dp[i-1]中已经考虑了所有的情况,只有都小于L的不满足的不在里边
return sum(dp)