इस समस्या में, हमें अद्वितीय पूर्णांकों की एक सरणी दी गई है। और हमें पूर्णांकों के सभी जोड़े (सकारात्मक और ऋणात्मक पूर्णांक) वापस करने होंगे जो सरणी में मौजूद हैं।
आइए समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
Input: array = {1 , 4 , 7 , -1, 2, 5, -7} Output: -11 -33
समस्या को हल करने का एक आसान तरीका दो छोरों का उपयोग करना और सकारात्मक-नकारात्मक जोड़े ढूंढना है। लेकिन यह समाधान जटिल होगा और इसमें क्रम n2 की समय जटिलता होगी जहां 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