ধরুন আমাদের 0s এবং 1s এর একটি অ্যারে সংখ্যা এবং একটি পূর্ণসংখ্যা k আছে, আমাদের চেক করতে হবে যে সমস্ত 1 এর অন্তত k স্থান একে অপরের থেকে দূরে আছে কিনা, অন্যথায়, False ফেরত দিন।
সুতরাং, যদি ইনপুটটি nums =[1,0,0,0,1,0,0,1], k =2 এর মত হয়, তাহলে আউটপুটটি সত্য হবে, কারণ প্রতিটি 1s থেকে কমপক্ষে 2 স্থান দূরে রয়েছে একে অপরকে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
শেষ :=-1
-
আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −
-
যদি সংখ্যা[i] 1 এর মত হয়, তাহলে −
-
যদি শেষটি -1 বা (i - শেষ - 1)>=k হয়, তাহলে −
-
শেষ :=i
-
-
অন্যথায়
-
ফেরত মিথ্যা
-
-
-
-
প্রত্যাবর্তন সত্য
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#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