Skip to content

Commit 981ef65

Browse files
authored
Create 2369-check-if-there-is-a-valid-partition-for-the-array.kt
1 parent d1eede3 commit 981ef65

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// rolling dp O(1) space
2+
class Solution {
3+
fun validPartition(nums: IntArray): Boolean {
4+
val n = nums.size
5+
val dp = booleanArrayOf(false, false, false, true)
6+
7+
for (i in 0 until n) {
8+
dp[i % 4] = false
9+
if (i > 0 && nums[i - 1] == nums[i])
10+
dp[i % 4] = dp[i % 4] or dp[(i + 2) % 4]
11+
if (i > 1 && nums[i - 1] == nums[i] && nums[i - 2] == nums[i])
12+
dp[i % 4] = dp[i % 4] or dp[(i + 1) % 4]
13+
if (i > 1 && nums[i - 1] + 1 == nums[i] && nums[i - 2] + 2 == nums[i])
14+
dp[i % 4] = dp[i % 4] or dp[(i + 1) % 4]
15+
}
16+
17+
return dp[(n - 1) % 4]
18+
}
19+
}
20+
21+
//dp O(n) space
22+
class Solution {
23+
fun validPartition(nums: IntArray): Boolean {
24+
val n = nums.size
25+
val dp = BooleanArray (n + 1).apply { this[0] = true }
26+
27+
for (i in 2..n) {
28+
dp[i] = dp[i] or (nums[i - 1] == nums[i - 2] && dp[i - 2])
29+
dp[i] = dp[i] or (i > 2 && nums[i - 1] == nums[i - 2] && nums[i - 1] == nums[i - 3] && dp[i - 3])
30+
dp[i] = dp[i] or (i > 2 && nums[i - 1] - 1 == nums[i - 2] && nums[i - 1] - 2 == nums[i - 3] && dp[i - 3])
31+
}
32+
33+
return dp[n]
34+
}
35+
}
36+
37+
//recursion
38+
class Solution {
39+
fun validPartition(nums: IntArray): Boolean {
40+
val n = nums.size
41+
val dp = IntArray (n) { -1 }
42+
43+
fun dfs(i: Int): Int {
44+
if (i == n) return 1
45+
if (dp[i] != -1) return dp[i]
46+
47+
if (i + 1 < n && nums[i] == nums[i + 1])
48+
if (dfs(i + 2) == 1) return 1
49+
if (i + 2 < n && nums[i] == nums[i + 1] && nums[i] == nums[i + 2])
50+
if (dfs(i + 3) == 1) return 1
51+
if (i + 2 < n && nums[i] + 1 == nums[i + 1] && nums[i] + 2 == nums[i + 2])
52+
if (dfs(i + 3) == 1) return 1
53+
54+
dp[i] = 0
55+
return dp[i]
56+
}
57+
58+
return dfs(0) == 1
59+
}
60+
}

0 commit comments

Comments
 (0)