문제 설명
동일한 크기의 배열 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