1566. 重复至少 K 次且长度为 M 的模式 (Python 实现)

x33g5p2x  于2021-12-28 转载在 Python  
字(0.8k)|赞(0)|评价(0)|浏览(203)

题目:
给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。
模式由其长度和重复次数定义:如果数组中存在至少重复 k 次且长度为 m 的模式,则返回 true ,否则返回 false 。

示例 1:

输入:arr = [1,2,4,4,4,4], m = 1, k = 3
输出:true
解释:模式 (4) 的长度为 1 ,且连续重复 4 次。注意,模式可以重复 k 次或更多次,但不能少于 k 次。

示例 2:

输入:arr = [1,2,1,2,1,1,1,3], m = 2, k = 2
输出:true
解释:模式 (1,2) 长度为 2 ,且连续重复 2 次。另一个符合题意的模式是 (2,1) ,同样重复 2 次。

示例 3:

输入:arr = [1,2,1,2,1,3], m = 2, k = 3
输出:false
解释:模式 (1,2) 长度为 2 ,但是只连续重复 2 次。不存在长度为 2 且至少重复 3 次的模式。

示例 4:

输入:arr = [1,2,3,1,2], m = 2, k = 2
输出:false
解释:模式 (1,2) 出现 2 次但并不连续,所以不能算作连续重复 2 次。

示例 5:

输入:arr = [2,2,2,2], m = 2, k = 3
输出:false
解释:长度为 2 的模式只有 (2,2) ,但是只连续重复 2 次。注意,不能计算重叠的重复次数。

代码:

class Solution:
    def containsPattern(self, arr: List[int], m: int, k: int) -> bool:
        res = [1]
        tmp = 1
        for x in range(len(arr)-m):
            for l in range(x,len(arr)-m,m):        
                if arr[l:l+m] == arr[l+m:l+m+m]:
                    tmp += 1
                    res.append(tmp)
                else:             
                    tmp = 1
            tmp = 1
        return max(res) >= k

相关文章