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

C++에서 중복이 있는 정렬된 배열에서 같음(또는 중간) 점 찾기

<시간/>

n개의 요소가 있는 정렬된 배열이 하나 있다고 가정합니다. 배열이 정렬됩니다. 더 작은 요소의 수가 더 큰 요소의 수와 동일한 배열에 요소가 존재하는지 여부를 찾아야 합니다. 배열에 등호점이 여러 번 나타나면 처음 나타나는 인덱스를 반환합니다. 그러한 점이 없으면 -1을 반환합니다. 요소가 A =[1, 1, 2, 3, 3, 3, 3, 3]과 같다고 가정하고 등점은 인덱스 2에 있고 요소는 A[2] =2입니다. 요소는 1이고 하나의 더 큰 요소는 3입니다.

모든 고유한 요소를 저장하기 위해 하나의 보조 배열을 만듭니다. 고유한 요소의 개수가 짝수이면 동일한 점을 찾을 수 없으며 그렇지 않으면 중간 요소가 중간점이 됩니다.

예시

#include<iostream>
using namespace std;
int searchEqualPoint(int arr[], int n) {
   int aux_arr[n];
   int i = 0, aux_index = 0;
   while (i < n) {
      aux_arr[aux_index++] = i++;
      while (i<n && arr[i] == arr[i-1])
         i++;
   }
   return (aux_index & 1)? aux_arr[aux_index>>1] : -1;
}
int main() {
   int arr[] = {1, 1, 2, 3, 3, 3, 3, 3};
   int n = sizeof(arr)/sizeof(arr[0]);
   int index = searchEqualPoint(arr, n);
   if (index != -1)
      cout << "Equal Point is: " << arr[index];
   else
      cout << "No Equal Point exists";
}

출력

Equal Point is: 2