Medium
You are given a positive integer n
, representing an n x n
city. You are also given a 2D grid buildings
, where buildings[i] = [x, y]
denotes a unique building located at coordinates [x, y]
.
A building is covered if there is at least one building in all four directions: left, right, above, and below.
Return the number of covered buildings.
Example 1:
Input: n = 3, buildings = [[1,2],[2,2],[3,2],[2,1],[2,3]]
Output: 1
Explanation:
[2,2]
is covered as it has at least one building:
[1,2]
)[3,2]
)[2,1]
)[2,3]
)Example 2:
Input: n = 3, buildings = [[1,1],[1,2],[2,1],[2,2]]
Output: 0
Explanation:
Example 3:
Input: n = 5, buildings = [[1,3],[3,2],[3,3],[3,5],[5,3]]
Output: 1
Explanation:
[3,3]
is covered as it has at least one building:
[1,3]
)[5,3]
)[3,2]
)[3,5]
)Constraints:
2 <= n <= 105
1 <= buildings.length <= 105
buildings[i] = [x, y]
1 <= x, y <= n
buildings
are unique.import kotlin.math.max
import kotlin.math.min
class Solution {
private fun helper(buildings: Array<IntArray>, n: Int): Int {
val minRow = IntArray(n + 1)
val maxRow = IntArray(n + 1)
val minCol = IntArray(n + 1)
val maxCol = IntArray(n + 1)
minRow.fill(n + 1)
minCol.fill(n + 1)
for (b in buildings) {
val x = b[0]
val y = b[1]
minRow[x] = min(minRow[x], y)
maxRow[x] = max(maxRow[x], y)
minCol[y] = min(minCol[y], x)
maxCol[y] = max(maxCol[y], x)
}
var ans = 0
for (arr in buildings) {
val x = arr[0]
val y = arr[1]
if (minRow[x] < y && maxRow[x] > y && minCol[y] < x && maxCol[y] > x) {
ans++
}
}
return ans
}
fun countCoveredBuildings(n: Int, buildings: Array<IntArray>): Int {
return helper(buildings, n)
}
}