给定两个数组,其中一个数组几乎被排序,一个元素处于错误的位置,导致该数组未排序,任务是将该元素与第二个数组中的最大元素交换,该数组可用于对第一个数组进行排序。
例子:
Input: arr1 = {1, 3, 7, 4, 10},
arr2 = {2, 1, 5, 8, 9}
Output: 1 3 7 9 10
Swap 4 with 9.
Input: arr1 = {20, 1, 23},
arr2 = {50, 26, 7}
Output: Not Possible
方法:
1.获取使数组不排序的元素的索引。
2.从第二个数组中获得最大元素,该元素满足索引错误的元素的相邻条件,即
(i)最大元素> = arr [错误的索引1]
(ii)max元素<= arr [错误的索引+1],如果存在错误的索引+1
C++
// C++ program to make array sorted
#include
using namespace std;
// Function to check whether there is any
// swappable element present to make the first
// array sorted
bool swapElement(int arr1[], int arr2[], int n)
{
// wrongIdx is the index of the element
// which is making the first array unsorted
int wrongIdx = 0;
for (int i = 1; i < n; i++) {
if (arr1[i] < arr1[i - 1])
wrongIdx = i;
int maximum = INT_MIN;
int maxIdx = -1;
bool res = false;
// Find the maximum element which satisfies the
// the above mentioned neighboring conditions
for (int i = 0; i < n; i++) {
if (arr2[i] > maximum && arr2[i] >= arr1[wrongIdx - 1]) {
if (wrongIdx + 1 <= n - 1 &&
arr2[i] <= arr1[wrongIdx + 1]) {
maximum = arr2[i];
maxIdx = i;
res = true;
}
}
}
// if res is true then swap the element
// and make the first array sorted
if (res)
swap(arr1[wrongIdx], arr2[maxIdx]);
return res;
}
// Function to print the sorted array if elements
// are swapped.
void getSortedArray(int arr1[], int arr2[], int n)
{
if (swapElement(arr1, arr2, n))
for (int i = 0; i < n; i++)
cout << arr1[i] << " ";
else
cout << "Not Possible" << endl;
}
// Drivers code
int main()
{
int arr1[] = { 1, 3, 7, 4, 10 };
int arr2[] = { 2, 1, 6, 8, 9 };
int n = sizeof(arr1) / sizeof(arr1[0]);
getSortedArray(arr1, arr2, n);
}
Java
// Java program to make array sorted
class GFG
{
// Function to check whether there
// is any swappable element present
// to make the first array sorted
static boolean swapElement(int[] arr1,
int[] arr2, int n)
{
// wrongIdx is the index of the
// element which is making the
// first array unsorted
int wrongIdx = 0;
for (int i = 1; i < n; i++)
{
if (arr1[i] < arr1[i - 1])
{
wrongIdx = i;
}
}
int maximum = Integer.MIN_VALUE;
int maxIdx = -1;
boolean res = false;
// Find the maximum element which
// satisfies the above mentioned
// neighboring conditions
for (int i = 0; i < n; i++)
{
if (arr2[i] > maximum &&
arr2[i] >= arr1[wrongIdx - 1])
{
if (wrongIdx + 1 <= n - 1 &&
arr2[i] <= arr1[wrongIdx + 1])
{
maximum = arr2[i];
maxIdx = i;
res = true;
}
}
}
// if res is true then swap
// the element and make the
// first array sorted
if (res)
{
swap(arr1, wrongIdx, arr2, maxIdx);
}
return res;
}
static void swap(int[] a, int wrongIdx,
int[] b, int maxIdx)
{
int c = a[wrongIdx];
a[wrongIdx] = b[maxIdx];
b[maxIdx] = c;
}
// Function to print the sorted
// array if elements are swapped.
static void getSortedArray(int arr1[],
int arr2[], int n)
{
if (swapElement(arr1, arr2, n))
{
for (int i = 0; i < n; i++)
{
System.out.print(arr1[i] + " ");
}
}
else
{
System.out.println("Not Possible");
}
}
// Driver code
public static void main(String[] args)
{
int arr1[] = {1, 3, 7, 4, 10};
int arr2[] = {2, 1, 6, 8, 9};
int n = arr1.length;
getSortedArray(arr1, arr2, n);
}
}
// This code contributed by 29AjayKumar
Python3
# Python3 program to make array sorted
import sys
# Function to check whether there is any
# swappable element present to make the
# first array sorted
def swapElement(arr1, arr2, n) :
# wrongIdx is the index of the element
# which is making the first array unsorted
wrongIdx = 0;
for i in range(1, n) :
if (arr1[i] < arr1[i - 1]) :
wrongIdx = i
maximum = -(sys.maxsize - 1)
maxIdx = -1
res = False
# Find the maximum element which satisfies
# the above mentioned neighboring conditions
for i in range(n) :
if (arr2[i] > maximum and
arr2[i] >= arr1[wrongIdx - 1]) :
if (wrongIdx + 1 <= n - 1 and
arr2[i] <= arr1[wrongIdx + 1]) :
maximum = arr2[i]
maxIdx = i
res = True
# if res is true then swap the element
# and make the first array sorted
if (res) :
(arr1[wrongIdx],
arr2[maxIdx]) = (arr2[maxIdx],
arr1[wrongIdx])
return res
# Function to print the sorted array
# if elements are swapped.
def getSortedArray(arr1, arr2, n) :
if (swapElement(arr1, arr2, n)) :
for i in range(n) :
print(arr1[i], end = " ")
else :
print("Not Possible")
# Driver code
if __name__ == "__main__" :
arr1 = [ 1, 3, 7, 4, 10 ]
arr2 = [ 2, 1, 6, 8, 9 ]
n = len(arr1)
getSortedArray(arr1, arr2, n)
# This code is contributed by Ryuga
C#
// C# program to make array sorted
using System;
class GFG
{
// Function to check whether there
// is any swappable element present
// to make the first array sorted
static bool swapElement(int[] arr1,
int[] arr2, int n)
{
// wrongIdx is the index of the
// element which is making the
// first array unsorted
int wrongIdx = 0;
for (int i = 1; i < n; i++)
{
if (arr1[i] < arr1[i - 1])
{
wrongIdx = i;
}
}
int maximum = int.MinValue;
int maxIdx = -1;
bool res = false;
// Find the maximum element which
// satisfies the above mentioned
// neighboring conditions
for (int i = 0; i < n; i++)
{
if (arr2[i] > maximum && arr2[i] >= arr1[wrongIdx - 1])
{
if (wrongIdx + 1 <= n - 1 &&
arr2[i] <= arr1[wrongIdx + 1])
{
maximum = arr2[i];
maxIdx = i;
res = true;
}
}
}
// if res is true then swap the element
// and make the first array sorted
if (res)
{
swap(arr1, wrongIdx, arr2, maxIdx);
}
return res;
}
static void swap(int[] a, int wrongIdx,
int[] b, int maxIdx)
{
int c = a[wrongIdx];
a[wrongIdx] = b[maxIdx];
b[maxIdx] = c;
}
// Function to print the sorted array
// if elements are swapped.
static void getSortedArray(int []arr1,
int []arr2, int n)
{
if (swapElement(arr1, arr2, n))
{
for (int i = 0; i < n; i++)
{
Console.Write(arr1[i] + " ");
}
}
else
{
Console.Write("Not Possible");
}
}
// Driver Code
public static void Main()
{
int []arr1 = {1, 3, 7, 4, 10};
int []arr2 = {2, 1, 6, 8, 9};
int n = arr1.Length;
getSortedArray(arr1, arr2, n);
}
}
// This code is contributed
// by PrinciRaj1992
输出:
1 3 7 9 10