Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
给出一串数列,求所有符合以下条件的子序列的数量

子序列所有数的最小值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



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理