【简单】题目:1566. 重复至少 K 次且长度为 M 的模式
思路:
- 长度是确定的,所以枚举起点,从起点开始是否有长度为k*m的片段【n】
- 判断后面的km段是否将m重复了k遍【n】
【时间复杂度nn 满足】
代码:
class Solution
{
public:
bool containsPattern(vector<int>& arr, int m, int k)
{
int n=arr.size();
for(int i=0;i+k*m<=n;i++) //遍历i后的k*m段(长度不能超过n)
{
bool flag=true;
for(int j=i;j<i+k*m;j++) //遍历k*m段是否有k个m
if(arr[j]!=arr[i + (j-i)%m]) //(j-i)%m在一段内的相对位置 + i偏移量
{
flag=false;
break;
}
if(flag) return true;
}
return false;
}
};
相关链接:
- vector& arr用法参考:vector
- LeetCode汇总
PS:
在题库里刷模版题,共一百多道,有视频讲解-> 先自己想-> 听获取思路 -> 试着用这个思路写-> 对比代码差别
不要直接照抄 没有意义。