Задача: Подмассив с фиксированными границами

Задача: Подмассив с фиксированными границами

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




Report Page