मान लीजिए कि हमारे पास 0s और 1s की एक सरणी संख्या है और एक पूर्णांक k है, हमें यह जांचना होगा कि क्या सभी 1 एक दूसरे से कम से कम k स्थान दूर हैं, अन्यथा, गलत लौटें।
इसलिए, यदि इनपुट nums =[1,0,0,0,1,0,0,1], k =2 जैसा है, तो आउटपुट सत्य होगा, क्योंकि 1s में से प्रत्येक कम से कम 2 स्थान दूर है। एक दूसरे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अंतिम:=-1
-
इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
अगर nums[i] 1 के समान है, तो -
-
यदि अंतिम -1 या (i - अंतिम - 1)> =k के समान है, तो -
-
अंतिम:=मैं
-
-
अन्यथा
-
झूठी वापसी
-
-
-
-
सही लौटें
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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