在Python中查找至少具有k个奇数值的最长递增子序列的长度

在Python中查找至少具有k个奇数值的最长递增子序列的长度

假设我们有一个名为nums的数字列表以及另一个值k,我们必须找到至少具有k个奇元素的最长递增子序列的大小。

因此,如果输入如下nums = [12, 14, 16, 5, 7, 8] k = 2,则输出将为3,因为具有至少2个奇数的最长递增子序列是[5、7、8]。

要解决这个问题,我们将执行以下步骤:

  • best := 0

  • 定义函数dp()。这将采用i、j、odd、taken参数。

  • 如果odd ≥ k,则

    • best := best 和 taken中最大的一个
  • 如果j与nums列表的大小相同,则
    • 返回
  • 如果nums[j]> nums[i],则
    • dp(j,j + 1,odd +(nums[j] AND 1),taken + 1)
  • dp(i,j + 1,odd,taken)

  • 在主方法中执行以下操作 –

  • 对于i在范围0到nums列表的大小中的操作如下所示 –

    • dp(i,i + 1,nums[i] AND 1,1)
  • 返回best

例子

让我们看一下以下实现以更好地理解 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程