मान लीजिए कि एक समुच्चय S है जिसमें मूल रूप से 1 से n तक की संख्याएँ हैं। लेकिन दुर्भाग्य से, कुछ त्रुटि के कारण, सेट में से एक नंबर सेट में दूसरे नंबर पर डुप्लिकेट हो गया, जिसके परिणामस्वरूप एक नंबर की पुनरावृत्ति हुई और दूसरी संख्या का नुकसान हुआ।
अब अगर हमारे पास अंक नामक एक सरणी है जो त्रुटि के बाद इस सेट की डेटा स्थिति का प्रतिनिधित्व कर रही है। हमारा काम दो बार आने वाली संख्या का पता लगाना है और फिर छूटी हुई संख्या का पता लगाना है। परिणामों को एक सरणी के रूप में लौटाएं।
इसलिए, यदि इनपुट [1,2,3,4,4,6] जैसा है, तो आउटपुट [4,5]
होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
आकार 2 की एक सरणी v परिभाषित करें
-
s1 :=A की सभी संख्याओं का योग
-
n :=A का आकार
-
exp_sum :=(n * (n + 1))
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
अगर ए[|ए[i]| - 1]> 0, फिर -
-
ए[|ए[i]| - 1] =-ए[|ए[i]| - 1]
-
-
अन्यथा
-
v[0] :=|ए[i]|
-
लूप से बाहर आएं
-
-
-
v[1] :=v[0] - (s1 - exp_sum)
-
वापसी वी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> findErrorNums(vector<int>& A) { vector<int> v(2); long long int s1 = accumulate(A.begin(), A.end(), 0); int n = A.size(); long long int exp_sum = (n * (n + 1)) / 2; for (int i = 0; i < n; i++) { if (A[abs(A[i]) - 1] > 0) { A[abs(A[i]) - 1] = -A[abs(A[i]) - 1]; } else { v[0] = abs(A[i]); break; } } v[1] = v[0] - (s1 - exp_sum); return v; } }; main(){ Solution ob; vector<int> v = {1,2,3,4,4,6}; print_vector(ob.findErrorNums(v)); }
इनपुट
{1,2,3,4,4,6}
आउटपुट
[4, 5, ]