给出一串数列,求所有符合以下条件的子序列的数量
子序列所有数的最小值minK,最大值maxK
设两个指针指向符合minK~maxK的最后位置,pos指向最后一个不符合minK~maxK范围的位置,复杂度O(n)
1 #2444
2 #Runtime: 681 ms (Beats 56.52%)
3 #Memory: 24.3 MB (Beats 26.9%)
4
5 class Solution(object):
6 def countSubarrays(self, nums, minK, maxK):
7 """
8 :type nums: List[int]
9 :type minK: int
10 :type maxK: int
11 :rtype: int
12 """
13 pos, l, r = -1, -1, -1
14 cnt = 0
15 for i in range(len(nums)):
16 if minK <= nums[i] <= maxK:
17 if nums[i] == minK:
18 l = i
19 if nums[i] == maxK:
20 r = i
21 cnt += max(0, min(l, r) - pos)
22 else:
23 pos = i
24 l, r = -1, -1
25 return cnt