給出一串?dāng)?shù)列,求所有符合以下條件的子序列的數(shù)量
子序列所有數(shù)的最小值minK,最大值maxK
設(shè)兩個(gè)指針指向符合minK~maxK的最后位置,pos指向最后一個(gè)不符合minK~maxK范圍的位置,復(fù)雜度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