LeetCode in Kotlin

3964. Minimum Lights to Illuminate a Road

Medium

You are given an integer array lights of length n, representing positions 0 through n - 1 on a road.

For each position i:

A position is visible if it is illuminated by at least one working bulb.

You may install additional bulbs at any positions. Each additional bulb installed at position j illuminates positions from max(0, j - 1) to min(n - 1, j + 1), inclusive.

Return the minimum number of additional bulbs required to make every position on the road visible.

Example 1:

Input: lights = [0,0,0,0]

Output: 2

Explanation:

One optimal placement is:

Therefore, the minimum number of additional bulbs required is 2.

Example 2:

Input: lights = [0,0,0,2,0]

Output: 1

Explanation:

Constraints:

Solution

import kotlin.math.max

class Solution {
    fun minLights(lights: IntArray): Int {
        val n = lights.size
        for (i in 0..<n) {
            if (lights[i] != 0) {
                val pos = max(0, i - lights[i])
                lights[pos] = max(lights[i], lights[pos])
            }
        }
        var ans = 0
        var coverage = 0
        for (i in 0..<n) {
            if (lights[i] == 0 && coverage == 0) {
                ans++
                if (i + 1 < n && lights[i + 1] == 0) {
                    coverage = 3
                }
            }
            coverage--
            coverage = max(coverage, lights[i])
        }
        return ans
    }
}