Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สูงสุดในอาร์เรย์ที่สามารถสร้างอาร์เรย์อื่นที่จัดเรียงใน 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 ) รับทั้งอาร์เรย์และความยาวและอัปเดต 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