题目
给你一个整数数组 nums。
nums 的子序列 sub 的长度为 x ,如果其满足以下条件,则称其为 有效子序列:
(sub[0] + sub[1]) % 2 == (sub[1] + sub[2]) % 2 == … == (sub[x - 2] + sub[x - 1]) % 2
返回 nums 的 最长的有效子序列 的长度。
一个 子序列 指的是从原数组中删除一些元素(也可以不删除任何元素),剩余元素保持原来顺序组成的新数组。
示例 1:
输入: nums = [1,2,3,4]
输出: 4
解释:
最长的有效子序列是 [1, 2, 3, 4]。
示例 2:
输入: nums = [1,2,1,1,2,1,2]
输出: 6
解释:
最长的有效子序列是 [1, 2, 1, 2, 1, 2]。
示例 3:
输入: nums = [1,3]
输出: 2
解释:
最长的有效子序列是 [1, 3]。
题解
class Solution(object):
def maximumLength(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 全偶,全奇,奇偶交替
odd, even = 0, 0
pre = nums[0]
ans = 1
for i in range(0, len(nums)):
if nums[i] % 2: # 子序列全为奇数
odd += 1
else: # 子序列全为偶数
even += 1
# 模为1的情况,子序列奇偶交替的情况
if i >= 1 and (nums[i] + pre) % 2 == 1:
ans += 1
pre = nums[i]
return max(ans, odd, even)