leetcode 5499. 少なくともK回、長さMのパターン(C++)を繰り返す

1859 ワード

正の整数配列arrをあげます.長さmで、配列の中で少なくともk回繰り返されるパターンを見つけてください.
パターンは、1つ以上の値からなるサブ配列(連続するサブシーケンス)であり、何度も繰り返しますが重複しません.モードは、その長さと繰り返し回数によって定義されます.
配列に少なくとも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  。  ,           。
 
ヒント:
  • 2 <= arr.length <= 100
  • 1 <= arr[i] <= 100
  • 1 <= m <= 100
  • 2 <= k <= 100
  • C++
    class Solution {
    public:
        bool containsPattern(vector& arr, int m, int k) 
        {
            int n=arr.size();
            for(int i=0;i+m-1 tmp=vector(arr.begin()+i,arr.begin()+i+m);
                int ans=1;
                for(int j=i+m;j+m-1 vec=vector(arr.begin()+j,arr.begin()+j+m);
                    if(tmp==vec)
                    {
                        ans++;
                        if(ans==k)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return false;
        }
    };