Skip to content

Commit aaf69d7

Browse files
authored
Create 0135-candy.kt
1 parent c9fc1bc commit aaf69d7

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

kotlin/0135-candy.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// O(n) linear sweep solution
2+
class Solution {
3+
fun candy(ratings: IntArray): Int {
4+
val n = ratings.size
5+
val candies = IntArray (n) { 1 }
6+
7+
for (i in 1 until n) {
8+
if (ratings[i] > ratings[i - 1])
9+
candies[i] = candies[i - 1] + 1
10+
}
11+
12+
for (i in n - 2 downTo 0){
13+
if (ratings[i] > ratings[i + 1])
14+
candies[i] = max(candies[i], candies[i + 1] + 1)
15+
}
16+
17+
return candies.sum() ?: n
18+
}
19+
20+
//graph dfs solution
21+
class Solution {
22+
fun candy(ratings: IntArray): Int {
23+
val n = ratings.size
24+
val outdegree = IntArray (n)
25+
26+
for (i in 0 until n) {
27+
if (i > 0 && ratings[i] > ratings[i - 1])
28+
outdegree[i]++
29+
if (i + 1 < n && ratings[i] > ratings[i + 1])
30+
outdegree[i]++
31+
}
32+
33+
val q = LinkedList<Int>()
34+
for ((index, degree) in outdegree.withIndex()) {
35+
if (degree == 0)
36+
q.addLast(index)
37+
}
38+
39+
val candies = IntArray (n)
40+
while (q.isNotEmpty()) {
41+
val i = q.removeFirst()
42+
43+
var candy = 1
44+
if (i > 0 && ratings[i] > ratings[i - 1])
45+
candy = maxOf(candy, candies[i - 1] + 1)
46+
if (i < n - 1 && ratings[i] > ratings[i + 1])
47+
candy = maxOf(candy, candies[i + 1] + 1)
48+
candies[i] = candy
49+
50+
if (i > 0 && ratings[i] < ratings[i - 1]) {
51+
outdegree[i - 1]--
52+
if (outdegree[i - 1] == 0)
53+
q.addLast(i - 1)
54+
}
55+
if (i < n - 1 && ratings[i] < ratings[i + 1]) {
56+
outdegree[i + 1]--
57+
if (outdegree[i + 1] == 0)
58+
q.addLast(i + 1)
59+
}
60+
}
61+
62+
return candies.sum()!!
63+
}
64+
}

0 commit comments

Comments
 (0)