मान लीजिए हमारे पास 0 और 1 का एक ऐरे nums और एक इंटीजर k है, हमें जांचना है कि क्या सभी 1 एक-दूसरे से कम से कम k स्थान दूर हैं, अन्यथा False लौटाएं।
इसलिए, यदि इनपुट है nums = [1,0,0,0,1,0,0,1], k = 2, तो आउटपुट true होगा, क्योंकि प्रत्येक 1 एक-दूसरे से कम से कम 2 स्थान दूर है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
last := -1
i := 0 से शुरू करें, जब i < nums का आकार, i बढ़ाते हुए, करें -
यदि 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; } }; 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