เราได้รับอาร์เรย์ของตัวเลขว่า 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 ) รับทั้งอาร์เรย์และความยาวและอัปเดต arr1[] หากพบว่าองค์ประกอบใน arr2[] มีค่าสูงสุดและยังสามารถแทนที่องค์ประกอบที่ไม่ถูกต้องใน arr[]
-
จัดเก็บดัชนีขององค์ประกอบที่วางผิดใน arr1[] ในตัวแปร wpos เริ่มแรก -1
-
maxx ใช้เพื่อเก็บค่าสูงสุดขององค์ประกอบเหล่านั้นของ arr2[] ที่สามารถแทนที่องค์ประกอบที่วางผิดของ arr1[] และทำการจัดเรียงได้
-
ในตอนแรก travers arr1[] และค้นหาองค์ประกอบที่ไม่ถูกต้องเช่น ถ้า arr[i]
-
ตอนนี้สำรวจ arr2[] และค้นหาองค์ประกอบที่สามารถวางไว้ระหว่าง arr1[wpos-1] andarr[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