ARTS Week 47
Algorithm 本周的算法题为 1566. 重复至少 K 次且长度为 M 的模式 给你一个正整数数组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 次。 实现代码如下: const containsPattern = function(arr, m, k) { const n = arr.length; if (n < m * k) return false; for (let i = 0; i <= n - m * k; i++) { let valid = true; for (let j = 1; j < k; j++) { for (let pos = 0; pos < m; pos++) { const currentPos = i + j * m + pos; const patternPos = i + pos; if (arr[currentPos] !== arr[patternPos]) { valid = false; break; } } if (!valid) break; } if (valid) return true; } return false; }; 解题思路: 首先检查数组的长度是否至少为 m * k。如果不足,则直接返回 false。 遍历所有可能的模式起始位置 i,确保这些位置可以容纳至少 k 个连续的模式(即 i 的范围是 0 到 arr.length - m * k)。 对于每个起始位置 i,检查从该位置开始的连续 k 个模式的元素是否完全一致。直接通过数组索引比较元素。 Review New Zealand relaxes visa rules for ‘digital nomads’ - Breaking News English Lesson ...