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