이 문제에서는 고유한 정수 배열이 제공됩니다. 그리고 배열에 있는 모든 정수 쌍(양수 및 음수)을 반환해야 합니다.
문제를 더 잘 이해하기 위해 예를 들어 보겠습니다 -
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