https://leetcode.com/problems/image-smoother/ Easy

Решение

class Solution {
    fun imageSmoother(img: Array<IntArray>): Array<IntArray> {
        val m = img.size
        val n = img[0].size
        val pref = Array(m + 1) { IntArray(n + 1) }
        var i = 0
        while (i < m) {
            var rowSum = 0
            val row = img[i]
            val prefRow = pref[i + 1]
            val prefRowUp = pref[i]
            var j = 0
            while (j < n) {
                rowSum += row[j]
                prefRow[j + 1] = prefRowUp[j + 1] + rowSum
                j++
            }
            i++
        }
        val res = Array(m) { IntArray(n) }
        val mLast = m - 1
        val nLast = n - 1
        i = 0
        while (i < m) {
            var j = 0
            while (j < n) {
                val r1 = if (i > 0) i - 1 else 0
                val c1 = if (j > 0) j - 1 else 0
                val r2 = if (i < mLast) i + 1 else mLast
                val c2 = if (j < nLast) j + 1 else nLast
                val sumRect = pref[r2 + 1][c2 + 1] - pref[r1][c2 + 1] - pref[r2 + 1][c1] + pref[r1][c1]
                val cnt = (r2 - r1 + 1) * (c2 - c1 + 1)
                res[i][j] = sumRect / cnt
                j++
            }
            i++
        }
        return res
    }
}