Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 모든 1의 길이가 K 자리 이상인지 확인

<시간/>

0과 1의 배열 num과 정수 k가 있다고 가정하고 모든 1이 서로 최소한 k 자리 떨어져 있는지 확인해야 합니다. 그렇지 않으면 False를 반환합니다.

따라서 입력이 nums =[1,0,0,0,1,0,0,1], k =2와 같으면 각각의 1이 에서 최소 2자리 떨어져 있으므로 출력은 참이 됩니다. 서로.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 마지막 :=-1

  • initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -

    • nums[i]가 1과 같으면 -

      • 마지막이 -1 또는 (i - last - 1)>=k와 같으면 -

        • 마지막 :=나는

      • 그렇지 않으면

        • 거짓을 반환

  • true를 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool kLengthApart(vector<int>& nums, int k) {
      int last = -1;
      for (int i = 0; i < nums.size(); i++) {
         if (nums[i] == 1) {
            if (last == -1 || (i - last - 1) >= k)
               last = i;
            else
               return false;
         }
      }
      return true;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,0,0,0,1,0,0,1};
   cout << (ob.kLengthApart(v, 2));
}

입력

{1,0,0,0,1,0,0,1}

출력

1