मान लीजिए कि हमारे पास n अलग-अलग तत्वों के साथ एक सरणी A है। एक सरणी B को अच्छा कहा जाता है यदि किन्हीं दो अलग-अलग तत्वों B[i] और B[j] के लिए |B[i] - B[j]| कम से कम एक बार बी में प्रकट होता है, और बी में सभी तत्व अलग होंगे। हमें यह जांचना होगा कि क्या हम ए में कई पूर्णांक जोड़ सकते हैं ताकि यह आकार में अधिक से अधिक 300 हो। यदि संभव हो तो नई सरणी लौटाएं, अन्यथा -1 लौटाएं।
इसलिए, यदि इनपुट A =[4, 8, 12, 6] जैसा है, तो आउटपुट [8, 12, 6, 2, 4, 10] होगा, क्योंकि |4−2| =|6−4| =|8−6| =|10−8| =|12−10| =2 सरणी में है, |6−2| =|8−4| =|10−6| =|12−8| =4 सरणी में है, |8−2| =|10−4| =|12−6| =6 सरणी में है, |10−2| =|12−4| =8 सरणी में है, और |12−2| =10 सरणी में है, इसलिए सरणी अच्छी है। (अन्य उत्तर भी संभव हैं)
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := size of A t := 0 b := 0 for initialize i := 0, when i < n, update (increase i by 1), do: a := A[i] if a < 0, then: t := 1 b := maximum of a and b if t is non-zero, then: print -1 Otherwise for initialize i := 0, when i <= b, update (increase i by 1), do: print i
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void solve(vector<int> A) { int n = A.size(); int t = 0; int b = 0; for (int i = 0; i < n; i++) { int a = A[i]; if (a < 0) t = 1; b = max(a, b); } if (t) cout << "-1"; else { for (int i = 0; i <= b; i++) cout << i << ", "; } } int main() { vector<int> A = { 4, 8, 12, 6 }; solve(A); }
इनपुट
{ 4, 8, 12, 6 }
आउटपुट
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,