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

C++에서 동일한 순서를 유지하는 두 개의 지정된 배열의 최대 배열

<시간/>

문제 설명

동일한 크기의 배열 A[]와 B[]가 주어집니다. 작업은 동일한 크기의 세 번째 배열을 형성하는 것입니다. 결과 배열에는 두 배열의 최대 n개 요소가 있어야 합니다. A[]의 요소를 먼저 선택한 다음 B[]의 요소를 원래 배열에 나타나는 것과 동일한 순서로 선택해야 합니다. 공통 요소가 있는 경우 res[]에는 하나의 요소만 있어야 하며 A[]

에 우선 순위를 부여해야 합니다.

예시

입력 배열이 -

인 경우
arr1[] ={9, 17, 2, 25, 6}arr2[] ={17, 4, 8, 10, 1} 최종 배열은 다음과 같습니다.{9, 17, 25, 8, 10} 

요소 17은 공통이며 우선순위가 arr1

입니다.

알고리즘

  • 두 배열의 복사본을 만들고 복사본을 내림차순으로 정렬
  • 해시를 사용하여 두 배열의 고유한 n개의 최대 요소를 선택하고, arr1[]에 우선순위를 부여합니다.
  • 결과 배열을 빈 상태로 초기화
  • arr1[]을 통과하여 해시에 있는 arr1[]의 요소를 복사합니다. 이것은 요소의 순서를 동일하게 유지하기 위해 수행됩니다.
  • arr2[]에 대해 4단계를 반복합니다. 이번에는 arr1[]
  • 에 없는 요소만 고려합니다.

예시

이제 예를 살펴보겠습니다 -

#include 네임스페이스 std;void printArray(vector &arr, int n) { for (int i =0; i  temp1(arr1, arr1 + n); 벡터 temp2(arr2, arr2 + n); 정렬(temp1.begin(), temp1.end(), 더 큰()); 정렬(temp2.begin(), temp2.end(), 더 큰()); 무순 맵 m; 정수 i =0, j =0; 동안 (m.size() =temp2[j]) { m[temp1[i]]++; ++나; } else { m[temp2[j]]++; ++j; } } 벡터 결과; for (int i =0; i  

출력

최종 배열:9 17 25 8 10