LeetCode in Kotlin

2768. Number of Black Blocks

Medium

You are given two integers m and n representing the dimensions of a 0-indexed m x n grid.

You are also given a 0-indexed 2D integer matrix coordinates, where coordinates[i] = [x, y] indicates that the cell with coordinates [x, y] is colored black. All cells in the grid that do not appear in coordinates are white.

A block is defined as a 2 x 2 submatrix of the grid. More formally, a block with cell [x, y] as its top-left corner where 0 <= x < m - 1 and 0 <= y < n - 1 contains the coordinates [x, y], [x + 1, y], [x, y + 1], and [x + 1, y + 1].

Return a 0-indexed integer array arr of size 5 such that arr[i] is the number of blocks that contains exactly i black cells.

Example 1:

Input: m = 3, n = 3, coordinates = [[0,0]]

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

Explanation: The grid looks like this:

There is only 1 block with one black cell, and it is the block starting with cell [0,0].

The other 3 blocks start with cells [0,1], [1,0] and [1,1]. They all have zero black cells.

Thus, we return [3,1,0,0,0].

Example 2:

Input: m = 3, n = 3, coordinates = [[0,0],[1,1],[0,2]]

Output: [0,2,2,0,0]

Explanation: The grid looks like this:

There are 2 blocks with two black cells (the ones starting with cell coordinates [0,0] and [0,1]).

The other 2 blocks have starting cell coordinates of [1,0] and [1,1]. They both have 1 black cell.

Therefore, we return [0,2,2,0,0].

Constraints:

Solution

class Solution {
    fun countBlackBlocks(m: Int, n: Int, coordinates: Array<IntArray>): LongArray {
        val ans = LongArray(5)
        val count: MutableMap<Int, Int> = HashMap()
        for (coordinate in coordinates) {
            val x = coordinate[0]
            val y = coordinate[1]
            for (i in x until x + 2) {
                for (j in y until y + 2) {
                    if (i - 1 >= 0 && i < m && j - 1 >= 0 && j < n) {
                        count.merge(
                            i * n + j,
                            1,
                        ) { a: Int?, b: Int? -> Integer.sum(a!!, b!!) }
                    }
                }
            }
        }
        for (freq in count.values) {
            ++ans[freq]
        }
        ans[0] = (m - 1L) * (n - 1) - ans.sum()
        return ans
    }
}
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