You are given a 2D integer array tiles where tiles[i] = [li, ri] represents that every tile j in the range li <= j <= ri is colored white.
You are also given an integer carpetLen, the length of a single carpet that can be placed anywhere.
Return the maximum number of white tiles that can be covered by the carpet.
Example 1:
Input: tiles = [[1,5],[10,11],[12,18],[20,25],[30,32]], carpetLen = 10
Output: 9
Explanation: Place the carpet starting on tile 10.
It covers 9 white tiles, so we return 9.
Note that there may be other places where the carpet covers 9 white tiles.
It can be shown that the carpet cannot cover more than 9 white tiles.
Example 2:
Input: tiles = [[10,11],[1,1]], carpetLen = 2
Output: 2
Explanation: Place the carpet starting on tile 10.
It covers 2 white tiles, so we return 2.
Constraints:
1 <= tiles.length <= 5 * 104
tiles[i].length == 2
1 <= li <= ri <= 109
1 <= carpetLen <= 109
The tiles are non-overlapping.
Solutions
Solution 1
Thinking
A carpet of length \(\textit{carpetLen}\) covers disjoint tile intervals. Placing the left end inside a tile never beats aligning it with some tile's left endpoint, so we only try those placements.
Sort tiles by left end. A pointer \(j\) keeps the farthest fully covered tile and \(s\) their total length. A partially covered next tile adds \(li+\textit{carpetLen}-tiles[j][0]\). \(j\) only moves forward.