मान लीजिए कि हमारे पास 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