Chúng ta được cung cấp một mảng các số như Arr1 [] và một mảng khác Arr2 [] có cùng độ mạnh hoặc khác nhau. Arr1 [] có các phần tử được sắp xếp theo thứ tự tăng dần, sao cho một phần tử duy nhất được sắp xếp. Chúng ta phải tìm phần tử từ mảng thứ hai Arr2 [] để nó có thể thay thế phần tử được đặt sai vị trí của Arr1 [] và sắp xếp nó. Ngoài ra, phần tử được chọn từ Arr2 [] phải là tối đa nếu có nhiều tùy chọn.
Đầu vào
Arr1[]= { 1,3,5,7,2,11 }, Arr2[]= { 4,8,7,10,9 }
Đầu ra
Maximum element that can make Arr1 sorted: 10
Giải thích - Các số trong Arr2 [] có thể sắp xếp Arr1 [] - 8,9,10 vì chúng đều> =7 và <=11. Trong số 10 cái này là tối đa.
Arr1 [] mới trở thành {1,3,5,7,10,11} và được sắp xếp.
Đầu vào
Arr1[]= { 12,5,22,17 }, Arr2[]= { 4,8,7,10,9 }
Đầu ra
No such element.
Giải thích - Không có âm sắc nào trong Arr2 []> =12 và <=22.
Arr1 [] không thể được sắp xếp.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Mảng arr1 [] và arr2 [] được sử dụng để lưu trữ số. Arr1 [] được sắp xếp theo thứ tự tăng dần trừ một phần tử.
-
Hàm sortMax (int arr1 [], int arr2 [], int n1, int n2) nhận cả hai mảng và cập nhật chiều dài của chúng arr1 [] nếu phần tử trong arr2 [] được tìm thấy là tối đa và cũng có thể thay thế phần tử sai trong arr []
-
Lưu trữ chỉ mục của phần tử được đặt sai trong arr1 [] trong wpos biến, ban đầu là -1.
-
maxx được sử dụng để lưu trữ tối đa trong số các phần tử của arr2 [] có thể thay thế phần tử bị đặt sai vị trí của arr1 [] và làm cho nó được sắp xếp.
-
Lúc đầu, lướt qua arr1 [] và tìm thấy phần tử không chính xác như vậy. Nếu arr [i]
-
Bây giờ, lướt qua arr2 [] và tìm các phần tử có thể được đặt giữa arr1 [wpos-1] vàarr [wpos + 1]. Ngoài ra, nếu một phần tử như vậy tồn tại thì hãy so sánh nó với maxx phần tử đó.
-
Cập nhật tối đa.
-
Cuối cùng thay arr1 [wpos] bằng maxx.
-
Nếu một phần tử như vậy được tìm thấy thì trả về maxx, còn phần tử khác thì trả về -1.
-
Nếu không tìm thấy phần tử nào, hãy hiển thị một thông báo.
-
Bản in khác được sắp xếp arr1 [].
Ví dụ
// 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]<<" "; } }
Đầu ra
Maximum in arr2[] to make arr1[] sorted:9 Arr1[]:1 3 7 9 10 Arr2[]:2 1 6 8 9