Skip to content

Commit ed24ec5

Browse files
authored
Create 0661-image-smoother.kt
1 parent d715a99 commit ed24ec5

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

kotlin/0661-image-smoother.kt

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// O(n * m) time and O(n * m) space
2+
class Solution {
3+
fun imageSmoother(img: Array<IntArray>): Array<IntArray> {
4+
val n = img.size
5+
val m = img[0].size
6+
val dirs = arrayOf(
7+
intArrayOf(0, 1),
8+
intArrayOf(0, -1),
9+
intArrayOf(1, 0),
10+
intArrayOf(-1, 0),
11+
intArrayOf(-1, -1),
12+
intArrayOf(1, 1),
13+
intArrayOf(-1, 1),
14+
intArrayOf(1, -1)
15+
)
16+
17+
val res = Array (n) { IntArray (m) }
18+
for (i in 0 until n) {
19+
for (j in 0 until m) {
20+
var count = 1
21+
var sum = img[i][j]
22+
for (dir in dirs) {
23+
val i2 = i + dir[0]
24+
val j2 = j + dir[1]
25+
if (i2 in (0 until n) && j2 in (0 until m)) {
26+
count++
27+
sum += img[i2][j2]
28+
}
29+
}
30+
res[i][j] = sum / count
31+
}
32+
}
33+
34+
return res
35+
}
36+
}
37+
38+
// O(n * m) time and O(1) space
39+
class Solution {
40+
fun imageSmoother(img: Array<IntArray>): Array<IntArray> {
41+
val n = img.size
42+
val m = img[0].size
43+
val dirs = arrayOf(
44+
intArrayOf(0, 1),
45+
intArrayOf(0, -1),
46+
intArrayOf(1, 0),
47+
intArrayOf(-1, 0),
48+
intArrayOf(-1, -1),
49+
intArrayOf(1, 1),
50+
intArrayOf(-1, 1),
51+
intArrayOf(1, -1)
52+
)
53+
54+
for (i in 0 until n) {
55+
for (j in 0 until m) {
56+
var count = 1
57+
var sum = img[i][j]
58+
for (dir in dirs) {
59+
val i2 = i + dir[0]
60+
val j2 = j + dir[1]
61+
if (i2 in (0 until n) && j2 in (0 until m)) {
62+
count++
63+
sum += img[i2][j2] and 0xFF
64+
}
65+
}
66+
img[i][j] = img[i][j] or ((sum / count) shl 8)
67+
}
68+
}
69+
70+
for (i in 0 until n) {
71+
for (j in 0 until m) {
72+
img[i][j] = img[i][j] shr 8
73+
}
74+
}
75+
76+
return img
77+
}
78+
}

0 commit comments

Comments
 (0)