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

C++로 프로그램을 작성하여 주어진 정렬되지 않은 정수 배열에서 최대값과 두 번째 최대값을 찾으십시오.

<시간/>

크기가 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

65 최대값과 두 번째 최대값인 배열의 고유한 요소입니다.