在Python中检查给定列表是否处于有效状态的程序

假设我们有一个称为nums的数字列表,我们必须检查是否可以使用以下规则之一对每个数字进行分组:1.连续的对(a,a)2.连续的三胞胎(a,a,a)3.连续的三胞胎(a,a + 1,a + 2)

因此,如果输入类似于nums = [7,7,3,4,5],则输出将为True,因为我们可以将[7,7]组合在一起,而将[3,4,5]组合在一起。

为了解决这个问题,我们将遵循以下步骤-

  • n:= nums的大小

  • dp:=大小为n + 1的列表,第一个值为True,其他为False

  • 对于2到n范围内的i

    • 如果(nums [i-1],nums [i-2],nums [i-3])相同或(nums [i-1],nums [i-2] + 1,nums [i-3] + 2个相同),然后

    • dp [i]:=真

    • 如果nums [i-1]与nums [i-2]相同,则

    • dp [i]:=真

    • 如果i> = 2并且dp [i-2]不为0,则

    • 如果i> = 3并且dp [i-3]不为0,则

    • 返回dp [n]

    让我们看下面的实现以更好地理解-

    示例

    class Solution:
       def solve(self, nums):
          n = len(nums)
          dp = [True] + [False] * n
          for i in range(2, n + 1):
             if i >= 2 and dp[i − 2]:
                if nums[i − 1] == nums[i − 2]:
                   dp[i] = True
             if i >= 3 and dp[i − 3]:
                if (nums[i − 1] == nums[i − 2] == nums[i − 3]) or (nums[i − 1] == nums[i − 2] + 1 == nums[i − 3] + 2):
                   dp[i] = True
             return dp[n]
    ob = Solution()nums = [8, 8, 4, 5, 6]
    print(ob.solve(nums))

    输入值

    [8, 8, 4, 5, 6]

    输出结果

    True