Detect Pattern of Length M Repeated K or More Times

Given an array of positive integers arr,  find a pattern of length m that is repeated k or more times.

pattern is a subarray (consecutive sub-sequence) that consists of one or more values repeated multiple times consecutively without overlapping. A pattern is defined by its length and the number of repetitions.

Return true if there exists a pattern of length m that is repeated k or more times, otherwise return false.

Example 1:

Input: arr = [1,2,4,4,4,4], m = 1, k = 3
Output: true
Explanation: The pattern (4) of length 1 is repeated 4 consecutive times. Notice that pattern can be repeated k or more times but not less.

Example 2:

Input: arr = [1,2,1,2,1,1,1,3], m = 2, k = 2
Output: true
Explanation: The pattern (1,2) of length 2 is repeated 2 consecutive times. Another valid pattern (2,1) is also repeated 2 times.

Example 3:

Input: arr = [1,2,1,2,1,3], m = 2, k = 3
Output: false
Explanation: The pattern (1,2) is of length 2 but is repeated only 2 times. There is no pattern of length 2 that is repeated 3 or more times.

Approach

C++

#include <bits/stdc++.h>
using namespace std;

bool containsPattern(vector<int&arrint mint k)
{
    int cnt = 0;

    for (int i = 0i < arr.size() - mi++)
    {
        //if ith element not matches with (i+m)th
        //element then reset count
        if (arr[i] != arr[i + m])
            cnt = 0;

        //if ith element matches with (i+m)th
        //element then increment count
        else
            cnt++;

        if (cnt == (k - 1) * m)
            return true;
    }
    return false;
}

int main()
{
    vector<intarr = {124444};
    int m = 1k = 3;

    if (containsPattern(arrmk))
        cout << "true\n";
    else
        cout << "false\n";

    return 0;
}


No comments:

Post a Comment