2369. Check if There is a Valid Partition For The Array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public boolean validPartition(int[] nums) {
int n = nums.length;

// 定义 dp[i] 为 nums[0, i - 1] 是否为可有效划分的数组
boolean[] dp = new boolean[n + 1];
dp[0] = true;
dp[2] = nums[1] == nums[0];
for (int i = 3; i <= n; i++) {
int l = nums[i - 3], m = nums[i - 2], r = nums[i - 1];
if (m == r) {
// 最后一个子数组长度为 2 时
dp[i] = dp[i - 2];
}
if (!dp[i] && l == m && m == r) {
// 最后一个子数组长度为 3 且值相等
dp[i] = dp[i - 3];
}
if (!dp[i] && l + 1 == m && m + 1 == r) {
// 最后一个子数组长度为 3 且值连续递增
dp[i] = dp[i - 3];
}
}

return dp[n];
}
}

References

2369. Check if There is a Valid Partition For The Array