Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 배열에 합이 이미 존재하는 배열의 쌍 찾기

<시간/>

이 문제에서는 N개의 정수로 구성된 배열 arr[]이 제공됩니다. 우리의 임무는 합이 이미 배열에 존재하는 배열의 쌍을 찾는 것입니다. 합계 값 =배열의 값인 쌍을 찾아야 합니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력

arr[] = {1, 2, 4, 6, 7}

출력

(1, 6), (2, 4)

설명

쌍(1, 6)의 경우 값의 합은 배열에 있는 7입니다.

쌍(2, 4)의 경우 값의 합은 배열에 있는 6입니다.

솔루션 접근 방식

문제에 대한 간단한 해결책은 배열의 요소를 사용하여 가능한 모든 쌍을 찾는 것입니다. 그런 다음 parir 값의 합계를 계산합니다. 배열에서 이 합계 값을 검색하고 있는 경우 인쇄합니다.

또한 쌍 수에 대한 카운터가 있습니다. 그리고 0이면 찾을 수 없는 쌍을 인쇄합니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
void findSumPairsArr(int arr[], int n){
   int pairCount = 0;
   for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
         for (int k = 0; k < n; k++) {
            if (arr[i] + arr[j] == arr[k]) {
               cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum = "<<(arr[i] + arr[j])<<"\n";
               pairCount++;
            }
         }
      }
   }
   if (!pairCount)
      cout<<"No Such Pairs found !";
}
int main() {
   int arr[] = { 1, 2, 4, 6, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Pairs in array whose sum already exists in array : \n";
   findSumPairsArr(arr, n);
   return 0;
}

출력

합이 이미 배열에 존재하는 배열의 쌍 -

( 1, 6 ), sum = 7
( 2, 4 ), sum = 6

보다 효과적인 또 다른 접근 방식은 해시 테이블을 사용하여 문제를 해결하는 것입니다. 우리는 모든 파리를 확인한 다음 합계를 계산하고 배열에 존재하는지 확인하고 추적합니다. pairCount가 0이면 "No such Pairs found!"를 인쇄합니다.

여기에서 c에서 해시 테이블의 구현은 unordered_set을 사용하여 수행됩니다.

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <bits/stdc++.h>
using namespace std;
void findSumPairsArr(int arr[], int n) {
   unordered_set<int> HT;
   for (int i = 0; i < n; i++)
      HT.insert(arr[i]);
   int pairCount = 0;
   for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
         if (HT.find(arr[i] + arr[j]) != HT.end()) {
            cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum =
            "<<(arr[i] + arr[j])<<"\n";
            pairCount ++;
         }
      }
   }
   if (!pairCount)
   cout<<"No Such Pairs found !";
}
int main() {
   int arr[] = {1, 2, 4, 6, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Pairs in array whose sum already exists in array : \n";
   findSumPairsArr(arr, n);
   return 0;
}

출력

합이 이미 배열에 존재하는 배열의 쌍 -

( 1, 6 ), sum = 7
( 2, 4 ), sum = 6