একটি বাইনারি অ্যারে nums এবং ইন্টিজার k দেওয়া আছে। চেক করতে হবে সব ১ একে অপরের থেকে কমপক্ষে k পজিশন দূরত্বে আছে কিনা।
ইনপুট: nums = [1,0,0,0,1,0,0,1], k = 2 → আউটপুট: true
সমাধানের ধাপগুলো:
last := -1(শেষ ১ এর পজিশন)অ্যারে ট্রায়ভার্স করব:
যদি
nums[i] == 1হয়:যদি
last == -1অথবা(i - last - 1) >= kহয়, তবেlast = iঅন্যথায়
falseরিটার্ন
লুপ শেষে
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;
}
};
int 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