Open In App

Maximize Array sum by swapping at most K elements with another array

Given two arrays A and B of size N and an integer K, the task is to find the maximum possible sum of array A by swapping at most K elements with array B.

Examples:



Input: A[] = {2, 3, 4}, B[] = {6, 8, 5}, K = 1 
Output: 15 
Explanation: Swap A[0] and B[1]. Hence sum = 8 + 3 + 4 = 15. 

Input: A[] = {9, 7}, B[] = {5, 1}, K = 2 
Output: 16 
Explanation: Since all the elements of array A are greater than the elements of array B, no swaps are required. 



Maximize Array sum by swapping at most K elements with another array using Sorting

The idea is to replace all the smallest elements present in A with the largest elements of B, till the value of A[i] < B[i] and K swaps are not complete.

Follow the steps mentioned below to implement the idea:

Below is the implementation of the above approach:
 




// C++ implementation to find maximum
// sum of array A by swapping
// at most K elements with array B
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the maximum sum
void maximumSum(int a[], int b[],
                int k, int n)
{
    int i, j;
    sort(a, a + n);
    sort(b, b + n);
 
    // If element of array a is
    // smaller than that of
    // array b, swap them.
    for (i = 0, j = n - 1; i < k;
         i++, j--) {
        if (a[i] < b[j])
            swap(a[i], b[j]);
        else
            break;
    }
 
    // Find sum of resultant array
    int sum = 0;
    for (i = 0; i < n; i++)
        sum += a[i];
    cout << sum << endl;
}
 
int main()
{
    int K = 1;
    int A[] = { 2, 3, 4 };
    int B[] = { 6, 8, 5 };
 
    int N = sizeof(A) / sizeof(A[0]);
 
    maximumSum(A, B, K, N);
    return 0;
}




// Java implementation to find maximum
// sum of array A by swapping
// at most K elements with array B
import java.util.*;
class GFG{
 
// Function to find the maximum sum
static void maximumSum(int a[], int b[],
                       int k, int n)
{
    int i, j;
    Arrays.sort(a);
    Arrays.sort(b);
 
    // If element of array a is
    // smaller than that of
    // array b, swap them.
    for (i = 0, j = n - 1; i < k; i++, j--)
    {
        if (a[i] < b[j])
        {
            int temp = a[i];
            a[i] = b[j];
            b[j] = temp;
        }
        else
            break;
    }
 
    // Find sum of resultant array
    int sum = 0;
    for (i = 0; i < n; i++)
        sum += a[i];
    System.out.print(sum +"\n");
}
 
// Driver Code
public static void main(String[] args)
{
    int K = 1;
    int A[] = { 2, 3, 4 };
    int B[] = { 6, 8, 5 };
 
    int N = A.length;
 
    maximumSum(A, B, K, N);
}
}
 
// This code is contributed by sapnasingh4991




# Python3 implementation to find maximum
# sum of array A by swapping
# at most K elements with array B
 
# Function to find the maximum sum
def maximumSum(a, b, k, n):
 
    a.sort()
    b.sort()
 
    # If element of array a is
    # smaller than that of
    # array b, swap them.
    i = 0
    j = n - 1
     
    while i < k:
        if (a[i] < b[j]):
            a[i], b[j] = b[j], a[i]
             
        else:
            break
             
        i += 1
        j -= 1
 
    # Find sum of resultant array
    sum = 0
    for i in range (n):
        sum += a[i]
         
    print(sum)
 
# Driver code
if __name__ == "__main__":
     
    K = 1
    A = [ 2, 3, 4 ]
    B = [ 6, 8, 5 ]
 
    N = len(A)
 
    maximumSum(A, B, K, N)
 
# This code is contributed by chitranayal




// C# implementation to find maximum
// sum of array A by swapping
// at most K elements with array B
using System;
class GFG{
 
// Function to find the maximum sum
static void maximumSum(int []a,
                       int []b,
                       int k, int n)
{
    int i, j;
    Array.Sort(a);
    Array.Sort(b);
 
    // If element of array a is
    // smaller than that of
    // array b, swap them.
    for (i = 0, j = n - 1; i < k; i++, j--)
    {
        if (a[i] < b[j])
        {
            int temp = a[i];
            a[i] = b[j];
            b[j] = temp;
        }
        else
            break;
    }
 
    // Find sum of resultant array
    int sum = 0;
    for (i = 0; i < n; i++)
        sum += a[i];
    Console.Write(sum +"\n");
}
 
// Driver Code
public static void Main()
{
    int K = 1;
    int []A = { 2, 3, 4 };
    int []B = { 6, 8, 5 };
 
    int N = A.Length;
 
    maximumSum(A, B, K, N);
}
}
 
// This code is contributed by Code_Mech




<script>
// JavaScript implementation to find maximum
// sum of array A by swapping
// at most K elements with array B
 
 
// Function to find the maximum sum
function maximumSum(a, b, k, n)
{
    let i, j;
    a.sort();
    b.sort();
 
    // If element of array a is
    // smaller than that of
    // array b, swap them.
    for (i = 0, j = n - 1; i < k;
        i++, j--) {
        if (a[i] < b[j])
     {
       let temp = a[i];
       a[i] = b[j];
       b[j] = temp;
     }
        else
            break;
    }
 
    // Find sum of resultant array
    let sum = 0;
    for (i = 0; i < n; i++)
        sum += a[i];
    document.write(sum);
}
 
    let K = 1;
    let A = [2, 3, 4 ];
    let B = [ 6, 8, 5 ];
 
    let N = A.length;
 
    maximumSum(A, B, K, N);
     
// This code is contributed by vaibhavrabadiya117.
</script>

Output
15

Time Complexity: O(N*log(N))
Auxiliary Space: O(1) 


Article Tags :