C++中能够使另一个数组排序的数组中的最大值


给定一个数字数组Arr1[]和另一个数组Arr2[],它们的长度相同或不同。Arr1[]中的元素按升序排列,只有一个元素未排序。我们必须从第二个数组Arr2[]中找到一个元素,该元素可以替换Arr1[]中放置错误的元素,并使其排序。此外,如果有多个选项可用,则从Arr2[]中选择的元素应为最大值。

输入

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

输出

Maximum element that can make Arr1 sorted: 10

说明 − Arr2[]中可以使Arr1[]排序的数字 − 8、9、10,因为它们都>=7且<=11。其中10最大。

新的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[]。

  • 将arr1[]中放置错误的元素的索引存储在变量wpos中,初始值为-1。

  • maxx用于存储arr2[]中那些可以替换arr1[]中放置错误的元素并使其排序的元素中的最大值。

  • 首先遍历arr1[]并找到不正确的元素。如果arr[i]

  • 现在遍历arr2[]并找到可以放在arr1[wpos-1]和arr[wpos+1]之间的元素。如果存在这样的元素,则将其与maxx这样的元素进行比较。

  • 更新最大值。

  • 最后用maxx替换arr1[wpos]。

  • 如果找到这样的元素,则返回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

更新于:2020年8月3日

100 次查看

启动您的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.