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