इस समस्या में, हमें अद्वितीय पूर्णांकों की एक सरणी दी गई है। और हमें पूर्णांकों के सभी युग्म (धनात्मक और ऋणात्मक पूर्णांक) वापस करने हैं जो सरणी में मौजूद हैं।
समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
इनपुट: सरणी = {1 , 4 , 7 , -1, 2, 5, -7} आउटपुट: -1 1 -7 7 समस्या को हल करने का एक आसान तरीका दो लूप का उपयोग करना और धनात्मक-ऋणात्मक युग्म ढूंढना है। लेकिन यह समाधान जटिल होगा और इसकी समय जटिलता n^2 क्रम की होगी जहां n सरणी का आकार है।
लेकिन, हमें समस्या को हल करने के लिए एक अधिक कुशल दृष्टिकोण ढूंढना होगा। इसके लिए, हम पहले सरणी को क्रमबद्ध करेंगे। और फिर इस क्रमबद्ध सरणी में, प्रत्येक ऋणात्मक पूर्णांक के लिए विपरीत (धनात्मक) पूर्णांक ढूंढेंगे। यह बाइनरी खोज एक अच्छा दृष्टिकोण होगा। और खोज का उपयोग करके पाए गए युग्मों को प्रिंट करें।
उदाहरण
आइए इस विधि का कोड चित्रण देखें -
#include <bits/stdc++.h> using namespace std; void positiveNegativePair(int arr[], int n) ; int main(){ int arr[] = { 1, 4, 6 , 3, -1, -2, 5, -6, -5 , 8 }; int n = 10; cout<<"Postive Negative pairs in the array are :\n"; positiveNegativePair(arr, n); return 0; } void positiveNegativePair(int arr[], int n){ bool pair_exists = false; sort(arr, arr + n); for (int i = 0; i < n; i++) { if (arr[i] < 0) { if (binary_search(arr, arr + n, -arr[i])) { cout<<arr[i]<<", "<<-arr[i]<<"\t"; pair_exists = true; } } else break; } if (!pair_exists) cout << "No positive-negative pairs exist in the code"; } आउटपुट
सरणी में धनात्मक ऋणात्मक युग्म हैं -
-6, 6 -5, 5 -1, 1