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