2369. 检查数组是否存在有效划分
每日链接
class Solution:
def validPartition(self, nums: List[int]) -> bool:
n = len(nums)
dp = [True] + [False] * n
for i in range(1, n + 1):
if i >= 2:
dp[i] = dp[i - 2] and nums[i - 1] == nums[i - 2]
if i >= 3:
dp[i] = dp[i] or (dp[i - 3] and (nums[i - 3] == nums[i - 2] == nums[i - 1] or nums[i - 3] + 2 == nums[i - 2] + 1 == nums[i - 1]))
return dp[-1]

class Solution {
public:
bool validPartition(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n + 1, false);
dp[0] = true;
for (int i = 1; i <= n; ++i){
if (i >= 2){
dp[i] = dp[i - 2] && nums[i - 2] == nums[i - 1];
}
if (i >= 3){
dp[i] = dp[i] || (dp[i - 3] && ((nums[i - 3] == nums[i - 2] && nums[i - 2] == nums[i - 1]) || (nums[i - 3] + 1 == nums[i - 2] && nums[i - 2] + 1 == nums[i - 1])));
}
}
return dp[n];
}
};
