Given an array a[ ] and the number of adjacent swap operations allowed are K. The task is to find the max number that can be formed using these swap operations.
Examples:
Input : a[]={ 1, 2, 9, 8, 1, 4, 9, 9, 9 }, K = 4
Output : 9 8 1 2 1 4 9 9 9
After 1st swap a[ ] becomes 1 9 2 8 1 4 9 9 9
After 2nd swap a[ ] becomes 9 1 2 8 1 4 9 9 9
After 3rd swap a[ ] becomes 9 1 8 2 1 4 9 9 9
After 4th swap a[ ] becomes 9 8 1 2 1 4 9 9 9Input : a[]={2, 5, 8, 7, 9}, K = 2
Output : 8 2 5 7 9
Approach:
- Starting from the first digit, check for the next K digits and store the index of the largest number.
- Bring that greatest digit to the top by swapping the adjacent digits.
- Reduce to the value of K by the number of adjacent swaps done.
- Repeat the above steps until the number of swaps becomes zero.
Below is the implementation of the above approach
C++
// C++ implementation of the above approach#include <bits/stdc++.h>using namespace std;// Function to print the// elements of the arrayvoid print(int arr[], int n){ for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl;}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionvoid swapMax(int* arr, int target_position, int current_position){ int aux = 0; for (int i = current_position; i > target_position; i--) { aux = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = aux; }}// Function to return the// maximum number arrayvoid maximizeArray(int* arr, int length, int swaps){ // Base condition if (swaps == 0) return; // Start from the first index for (int i = 0; i < length; i++) { int max_index = 0, max = INT_MIN; // Search for the next K elements int limit = (swaps + i) > length ? length : swaps + i; // Find index of the maximum // element in next K elements for (int j = i; j <= limit; j++) { if (arr[j] > max) { max = arr[j]; max_index = j; } } // Update the value of // number of swaps swaps -= (max_index - i); // Update the array elements by // swapping adjacent elements swapMax(arr, i, max_index); if (swaps == 0) break; }}// Driver codeint main(){ int arr[] = { 1, 2, 9, 8, 1, 4, 9, 9, 9 }; int length = sizeof(arr) / sizeof(int); int swaps = 4; maximizeArray(arr, length, swaps); print(arr, length); return 0;} |
Java
// Java implementation of the above approachclass GFG{// Function to print the// elements of the arraystatic void print(int arr[], int n){ for (int i = 0; i < n; i++) { System.out.print(arr[i] + " "); } System.out.println();}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionstatic void swapMax(int[] arr, int target_position, int current_position){ int aux = 0; for (int i = current_position; i > target_position; i--) { aux = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = aux; }}// Function to return the// maximum number arraystatic void maximizeArray(int[] arr, int length, int swaps){ // Base condition if (swaps == 0) return; // Start from the first index for (int i = 0; i < length; i++) { int max_index = 0, max = Integer.MIN_VALUE; // Search for the next K elements int limit = (swaps + i) > length ? length : swaps + i; // Find index of the maximum // element in next K elements for (int j = i; j <= limit; j++) { if (arr[j] > max) { max = arr[j]; max_index = j; } } // Update the value of // number of swaps swaps -= (max_index - i); // Update the array elements by // swapping adjacent elements swapMax(arr, i, max_index); if (swaps == 0) break; }}// Driver codepublic static void main(String[] args) { int arr[] = { 1, 2, 9, 8, 1, 4, 9, 9, 9 }; int length = arr.length; int swaps = 4; maximizeArray(arr, length, swaps); print(arr, length);}}/* This code is contributed by PrinciRaj1992 */ |
Python3
# Python3 implementation of the above approach import sys# Function to print the # elements of the array def print_ele(arr, n) : for i in range(n) : print(arr[i],end=" "); print(); # Exchange array elements one by # one from right to left side # starting from the current position # and ending at the target position def swapMax(arr, target_position, current_position) : aux = 0; for i in range(current_position, target_position,-1) : aux = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = aux; # Function to return the # maximum number array def maximizeArray(arr, length, swaps) : # Base condition if (swaps == 0) : return; # Start from the first index for i in range(length) : max_index = 0; max = -(sys.maxsize-1); # Search for the next K elements if (swaps + i) > length : limit = length else: limit = swaps + i # Find index of the maximum # element in next K elements for j in range(i, limit + 1) : if (arr[j] > max) : max = arr[j]; max_index = j; # Update the value of # number of swaps swaps -= (max_index - i); # Update the array elements by # swapping adjacent elements swapMax(arr, i, max_index); if (swaps == 0) : break; # Driver code if __name__ == "__main__" : arr = [ 1, 2, 9, 8, 1, 4, 9, 9, 9 ]; length = len(arr); swaps = 4; maximizeArray(arr, length, swaps); print_ele(arr, length); # This code is contributed by AnkitRai01 |
C#
// C# program to find the sum // and product of k smallest and // k largest prime numbers in an array using System; class GFG{// Function to print the// elements of the arraystatic void print(int []arr, int n){ for (int i = 0; i < n; i++) { Console.Write(arr[i] + " "); } Console.WriteLine();}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionstatic void swapMax(int[] arr, int target_position, int current_position){ int aux = 0; for (int i = current_position; i > target_position; i--) { aux = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = aux; }}// Function to return the// maximum number arraystatic void maximizeArray(int[] arr, int length, int swaps){ // Base condition if (swaps == 0) return; // Start from the first index for (int i = 0; i < length; i++) { int max_index = 0, max = int.MinValue; // Search for the next K elements int limit = (swaps + i) > length ? length : swaps + i; // Find index of the maximum // element in next K elements for (int j = i; j <= limit; j++) { if (arr[j] > max) { max = arr[j]; max_index = j; } } // Update the value of // number of swaps swaps -= (max_index - i); // Update the array elements by // swapping adjacent elements swapMax(arr, i, max_index); if (swaps == 0) break; }}// Driver codepublic static void Main(String[] args) { int []arr = { 1, 2, 9, 8, 1, 4, 9, 9, 9 }; int length = arr.Length; int swaps = 4; maximizeArray(arr, length, swaps); print(arr, length);}}/* This code is contributed by PrinciRaj1992 */ |
Javascript
<script>// JavaScript implementation of the above approach// Function to print the// elements of the arrayfunction print(arr, n) { for (let i = 0; i < n; i++) { document.write(arr[i] + " "); } document.write("<br>");}// Exchange array elements one by// one from right to left side// starting from the current position// and ending at the target positionfunction swapMax(arr, target_position, current_position) { let aux = 0; for (let i = current_position; i > target_position; i--) { aux = arr[i - 1]; arr[i - 1] = arr[i]; arr[i] = aux; }}// Function to return the// maximum number arrayfunction maximizeArray(arr, length, swaps) { // Base condition if (swaps == 0) return; // Start from the first index for (let i = 0; i < length; i++) { let max_index = 0, max = Number.MIN_SAFE_INTEGER; // Search for the next K elements let limit = (swaps + i) > length ? length : swaps + i; // Find index of the maximum // element in next K elements for (let j = i; j <= limit; j++) { if (arr[j] > max) { max = arr[j]; max_index = j; } } // Update the value of // number of swaps swaps -= (max_index - i); // Update the array elements by // swapping adjacent elements swapMax(arr, i, max_index); if (swaps == 0) break; }}// Driver codelet arr = [1, 2, 9, 8, 1, 4, 9, 9, 9];let length = arr.length;let swaps = 4;maximizeArray(arr, length, swaps);print(arr, length);// This code is contributed by gfgking</script> |
9 8 1 2 1 4 9 9 9
Time Complexity: O(N*N) where N is the length of given array.
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Find More on on that Topic: geeksforgeeks.org/maximum-number-formed-from-array-with-k-number-of-adjacent-swaps-allowed-2/ […]
… [Trackback]
[…] Find More here on that Topic: geeksforgeeks.org/maximum-number-formed-from-array-with-k-number-of-adjacent-swaps-allowed-2/ […]