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

C++에서 정렬된 다른 배열을 만들 수 있는 배열의 최대값

<시간/>

Arr1[]이라는 숫자 배열과 길이가 같거나 다른 또 다른 배열 Arr2[]가 제공됩니다. Arr1[]에는 단일 요소가 정렬되지 않도록 오름차순으로 정렬된 요소가 있습니다. Arr1[]의 잘못 배치된 요소를 대체하고 정렬할 수 있도록 두 번째 배열 Arr2[]에서 요소를 찾아야 합니다. 또한 Arr2[]에서 선택한 요소는 여러 옵션을 사용할 수 있는 경우 최대값이어야 합니다.

입력

Arr1[]= { 1,3,5,7,2,11 }, Arr2[]= { 4,8,7,10,9 }

출력

Maximum element that can make Arr1 sorted: 10

설명 - Arr1[]을 정렬할 수 있는 Arr2[]의 숫자는 모두>=7 및 <=11이므로 8,9,10입니다. 이 10개 중 최대값입니다.

New Arr1[]이 { 1,3,5,7,10,11 }이 되어 정렬됩니다.

입력

Arr1[]= { 12,5,22,17 }, Arr2[]= { 4,8,7,10,9 }

출력

No such element.

설명 − Arr2[]에>=12 및 <=22인 숫자가 없습니다.

Arr1[]을(를) 정렬할 수 없습니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 배열 arr1[] 및 arr2[]는 숫자를 저장하는 데 사용됩니다. Arr1[]은 하나의 요소를 제외하고 오름차순으로 정렬됩니다.

  • 함수 sortMax( int arr1[], int arr2[], int n1, int n2 )는 배열과 배열의 길이를 모두 취하고 arr2[]의 요소가 최대값이고 arr[]<의 잘못된 요소를 대체할 수도 있는 경우 arr1[]을 업데이트합니다. /P>

  • 변수 wpos의 arr1[]에 잘못 배치된 요소의 인덱스를 저장합니다(초기 -1).

  • maxx는 arr1[]의 잘못 배치된 요소를 대체할 수 있는 arr2[]의 요소 중 최대값을 저장하고 정렬하는 데 사용됩니다.

  • 처음에는 arr1[]을 탐색하고 잘못된 요소를 찾습니다. arr[i]

  • 이제 arr2[]를 탐색하고 arr1[wpos-1]과 arr[wpos+1] 사이에 배치할 수 있는 요소를 찾습니다. 또한 그러한 요소가 존재한다면 maxx와 같은 요소와 비교하십시오.

  • 최대 업데이트.

  • 결국 arr1[wpos]을 maxx로 교체합니다.

  • 그러한 요소가 발견되면 maxx를 반환하고, 그렇지 않으면 -1을 반환합니다.

  • 요소가 발견되지 않으면 메시지를 표시합니다.

  • 그렇지 않으면 정렬된 arr1[]을 인쇄합니다.

예시

// C++ program to make array sorted
#include <bits/stdc++.h>
using namespace std;
int sortMax(int arr1[], int arr2[], int n1, int n2) //making arr1 sorted{
   int wpos=-1;
   int maxx=-1;
   int i,j;
   for(i=0;i<n1;i++)
   if(arr1[i]<arr1[i-1])
      wpos=i;
   for(j=0;j<n2;j++){
      if(arr2[j]>=arr1[wpos-1] && arr2[j]<=arr1[wpos+1])
         if(arr2[j]>=maxx)
            maxx=arr2[j];
   }
   if(maxx!=-1)
      arr1[wpos]=maxx;
   return maxx;
}
int main(){
   int arr1[] = { 1, 3, 7, 4, 10 };
   int arr2[] = { 2, 1, 6, 8, 9 };
   int len1 = sizeof(arr1) / sizeof(arr1[0]);
   int len2 = sizeof(arr2) / sizeof(arr2[0]);
   int res=sortMax(arr1, arr2, len1, len2);
   if(res==-1)
      cout<<"No swap possible! No such element!";
   else{
      cout<<"Maximum in arr2[] to make arr1[] sorted:"<<res;
      cout<<endl<<"Arr1[]:";
      for(int i=0;i<len1;i++)
         cout<<arr1[i]<<" ";
         cout<<endl<<"Arr2[]:";
      for(int i=0;i<len2;i++)
         cout<<arr2[i]<<" ";
   }
}

출력

Maximum in arr2[] to make arr1[] sorted:9
Arr1[]:1 3 7 9 10
Arr2[]:2 1 6 8 9