Задача: Подмассив с фиксированными границами
https://t.me/pythonlУсловие: дается целочисленный массив nums и два целых числа minK и maxK.
Подмассив nums с фиксированной привязкой - это подмассив, который удовлетворяет следующим условиям:
Минимальное значение в подмассиве равно minK.
Максимальное значение в подмассиве равно max.
Возвращает количество подмассивов с фиксированной привязкой.
Подмассив - это непрерывная часть массива.
Пример:
Ввод: nums = [1,3,5,2,7,5], minK = 1, maxK = 5
Вывод: 2
Ввод: nums = [1,1,1,1], minK = 1, maxK = 1
Вывод: 10
Решение:
Python
class Solution:
def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:
n = len(nums)
breaker = i = j = 0
answer = maxKCount = minKCount = 0
while i < n:
while breaker < n and minK <= nums[breaker] <= maxK:
breaker += 1
while (minKCount == 0 or maxKCount == 0) and j < breaker:
minKCount += int(nums[j] == minK)
maxKCount += int(nums[j] == maxK)
j += 1
if j == breaker and (minKCount == 0 or maxKCount == 0):
breaker += 1
i = j = breaker
maxKCount = minKCount = 0
else:
answer += breaker - j + 1
minKCount -= int(nums[i] == minK)
maxKCount -= int(nums[i] == maxK)
i += 1
return answer