크기가 N인 정렬되지 않은 정수 배열을 제공했다고 가정해 보겠습니다. 작업은 배열에 있는 고유한 최대 및 두 번째 최대 요소를 찾는 것입니다. 배열에는 중복 요소도 포함될 수 있습니다. 따라서 우리는 고유한 요소만 찾아야 합니다. 예를 들어,
입력-1 -
N = 5 A[ ] = { 2, 2, 1, 3, 4 }
출력 -
4 3
설명 − 주어진 배열에서 '4'가 최대값이고 '3'이 두 번째 최대값임을 알 수 있습니다.
입력-2 -
N = 4 A[ ] = { 1,3,3,2 }
출력 -
3 2
설명 − 주어진 크기 4의 배열에서 '3'이 가장 크고 '2'가 두 번째로 큰 것을 볼 수 있으므로 3 2를 출력으로 반환합니다.
이 문제를 해결하기 위한 접근 방식
크기가 N인 주어진 배열에는 일부 중복 요소도 있을 수 있습니다. 배열에서 최대값과 두 번째 최대값을 찾기 위해 최대값과 두 번째 최대값을 저장하는 두 개의 변수를 초기화할 수 있습니다.
초기에 현재 요소가 최대값보다 크면 그 값을 최대값에 저장하고 최대값(이전) 값을 두 번째 최대값에 저장합니다.
고유한 요소를 찾기 위해 현재 요소가 max와 같은지 여부를 확인합니다. 현재 값이 최대값과 같지 않고 두 번째 최대값보다 큰 경우 두 번째 최대값의 이전 값을 현재 값으로 바꿉니다.
-
배열의 N 크기를 초기화하고 입력하십시오.
-
maxAndSecondMax(int arr[], int size) 함수는 배열과 배열의 크기를 입력으로 받습니다. 주어진 배열의 최대 및 두 번째 최대 요소를 반환합니다.
-
배열 요소를 반복하고 현재 요소가 최대값보다 큰지 찾은 다음 현재 값을 최대값에 저장하고 최대값의 이전 값을 두 번째 최대값으로 저장합니다.
-
그렇지 않고 현재 값이 두 번째 최대값보다 크면 이전 값을 현재 값으로 바꿉니다. 또한 현재 값이 최대값과 같지 않아야 합니다.
-
두 번째 최대값에 값이 포함되어 있지 않은지 확인하십시오.
-
최종 출력으로 최대값과 두 번째 최대값을 반환합니다.
예시
#include<bits/stdc++.h> using namespace std; void maxAndSecondMax(int *arr, int size){ int max= INT_MIN; int s_max= INT_MIN; for(int i=0;i<size; ++i){ if(arr[i] >max){ s_max= max; max= arr[i]; } else if(arr[i]> s_max && arr[i]!= max){ s_max= arr[i]; } } if(s_max==INT_MIN){ s_max= -1; } cout<<max<<" "<<s_max; } int main(){ int N= 6; int A[N]= {1,3,2,5,6,3}; maxAndSecondMax(A,N); return 0; }
출력
위의 코드를 실행하면 출력이 다음과 같이 인쇄됩니다.
6 5
6 및 5 최대값과 두 번째 최대값인 배열의 고유한 요소입니다.