Maximum White Tiles Covered by a Carpet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from typing import List

class Solution:
    def maximumWhiteTiles(self, tiles: List[List[int]], carpetLen: int) -> int:
        tiles.sort()
        res = 0
        j = 0
        cover = 0
        i = 0
        while res < carpetLen and i < len(tiles):
            if tiles[j][0] + carpetLen > tiles[i][1]:
                cover += tiles[i][1] - tiles[i][0] + 1
                res = max(res, cover)
                i += 1
            else:
                partial = max(0, tiles[j][0] + carpetLen - tiles[i][0])
                res = max(res, cover + partial)
                cover -= (tiles[j][1] - tiles[j][0] + 1)
                j += 1
        return res