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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP