LeetCode in Kotlin

957. Prison Cells After N Days

Medium

There are 8 prison cells in a row and each cell is either occupied or vacant.

Each day, whether the cell is occupied or vacant changes according to the following rules:

Note that because the prison is a row, the first and the last cells in the row can’t have two adjacent neighbors.

You are given an integer array cells where cells[i] == 1 if the ith cell is occupied and cells[i] == 0 if the ith cell is vacant, and you are given an integer n.

Return the state of the prison after n days (i.e., n such changes described above).

Example 1:

Input: cells = [0,1,0,1,1,0,0,1], n = 7

Output: [0,0,1,1,0,0,0,0]

Explanation: The following table summarizes the state of the prison on each day:

Day 0: [0, 1, 0, 1, 1, 0, 0, 1]

Day 1: [0, 1, 1, 0, 0, 0, 0, 0]

Day 2: [0, 0, 0, 0, 1, 1, 1, 0]

Day 3: [0, 1, 1, 0, 0, 1, 0, 0]

Day 4: [0, 0, 0, 0, 0, 1, 0, 0]

Day 5: [0, 1, 1, 1, 0, 1, 0, 0]

Day 6: [0, 0, 1, 0, 1, 1, 0, 0]

Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

Example 2:

Input: cells = [1,0,0,1,0,0,1,0], n = 1000000000

Output: [0,0,1,1,1,1,1,0]

Constraints:

Solution

@Suppress("NAME_SHADOWING")
class Solution {
    fun prisonAfterNDays(cells: IntArray, n: Int): IntArray {
        var n = n
        if (n == 0) {
            return cells
        }
        var first: IntArray? = null
        var prev = cells
        var period: Int
        var day = 0
        while (n > 0) {
            day++
            n--
            val next = getNextDay(prev)
            if (next.contentEquals(first)) {
                period = day - 1
                n %= period
            }
            if (day == 1) {
                first = next
            }
            prev = next
        }
        return prev
    }

    private fun getNextDay(arr: IntArray): IntArray {
        val ret = IntArray(8)
        for (i in 1..6) {
            if (arr[i - 1] == arr[i + 1]) {
                ret[i] = 1
            }
        }
        return ret
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy