मान लीजिए कि हमारे पास एक सरणी और एक पूर्णांक k है, हमें यह जांचना होगा कि क्या सरणी में दो अलग-अलग सूचकांक i और j हैं जैसे कि nums[i] =nums[j] और i और j के बीच पूर्ण अंतर अधिकतम k है।
इसलिए, यदि इनपुट [1,2,4,1] और k =3 जैसा है, तो आउटपुट सही होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
जोड़े की एक सरणी nn परिभाषित करें
-
इनिशियलाइज़ i :=0 के लिए, जब i - अंकों का आकार, अपडेट करें (i को 1 से बढ़ाएँ), करें -
-
nn के अंत में {nums[i], i} डालें
-
-
सरणी nn को सॉर्ट करें
-
इनिशियलाइज़ करने के लिए मैं :=1, जब i
-
यदि nn[i] का पहला तत्व nn[i - 1] के पहले तत्व के समान है और |nn का दूसरा [i] - nn का दूसरा [i - 1]|, तो -
-
सही लौटें
-
-
-
झूठी वापसी
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { vector<pair<int, int> > nn; for (<) { nn.push_back(make_pair(nums[i], i)); } sort(nn.begin(), nn.end()); for (int i = 1; i < nn.size(); i++) { if (nn[i].first == nn[i - 1].first and abs(nn[i].second - nn[i - 1].second) <= k) return true; } return false; } }; main(){ Solution ob; vector<int> v = {1,2,4,1}; cout << (ob.containsNearbyDuplicate(v, 3)); }
इनपुट
{1,2,4,1}
आउटपुट
1