在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