Computer >> Máy Tính >  >> Lập trình >> C ++

Kiểm tra xem tất cả 1 có ở mức thấp nhất K Vị trí đi trong C ++

Giả sử chúng ta có một số mảng là 0s và 1s và một số nguyên k, chúng ta phải kiểm tra xem tất cả các số 1 có cách xa nhau ít nhất k vị trí hay không, nếu không, trả về False.

Vì vậy, nếu đầu vào giống như nums =[1,0,0,0,1,0,0,1], k =2, thì đầu ra sẽ là true, vì mỗi số 1 cách xa ít nhất 2 vị trí nhau.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • cuối cùng:=-1

  • để khởi tạo i:=0, khi tôi

    • nếu nums [i] bằng 1 thì -

      • nếu cuối giống -1 hoặc (i - last - 1)> =k, thì -

        • cuối cùng:=i

      • Nếu không

        • trả về false

  • trả về true

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

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

Đầu ra

1