假设我们有一个称为nums的数字列表,另一个值为k,我们必须找到具有至少k个奇数元素的最长递增子序列的大小。
因此,如果输入像nums = [12、14、16、5、7、8] k = 2,则输出将为3,因为具有至少2个奇数值的最长递增子序列为[5、7, 8]。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, k): best = 0 def dp(i, j, odd, taken): nonlocal best if odd >= k: best = max(best, taken) if j == len(nums): return if nums[j] > nums[i]: dp(j, j + 1, odd + (nums[j] & 1), taken + 1) dp(i, j + 1, odd, taken) for i in range(len(nums)): dp(i, i + 1, nums[i] & 1, 1) return best ob = Solution() nums = [12, 14, 16, 5, 7, 8] k = 2 print(ob.solve(nums, k))
[12, 14, 16, 5, 7, 8], 2输出结果
3