Find the modified array after performing k operations of given type
Given an array arr[] of n integers and an integer K. In one operation every element of the array is replaced by the difference of that element and the maximum value of the array. The task is to print the array after performing K operations.
Examples:
Input: arr[] = {4, 8, 12, 16}, k = 2
Output: 0 4 8 12
k = 1, arr[] = {12, 8, 4, 0}
k = 2, arr[] = {0, 4, 8, 12}
Input: arr[] = {14, 28, 14, 106, 223}, k = 12
Output: 0 14 0 92 209
Approach: There are two possible cases:
- If k is odd then the new array will be max(arr) – arr[i] for all i in range [0, n).
- If k is even then the new array will be arr[i] – min(arr) for all i in range [0, n).
For example:
Let arr[] = {4, 8, 12, 16}
For k = 1, arr[] = (12, 8, 4, 0}
For k = 2, arr[] = (0, 4, 8, 12}
For k = 3, arr[] = (12, 8, 4, 0}
For k = 4, arr[] = (0, 4, 8, 12}
It can be observed that the array is repeating after every 2 operations.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printArray( int arr[], int n)
{
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
}
void removeMin( int arr[], int n)
{
int i, minVal = arr[0];
for (i = 1; i < n; i++)
minVal = min(minVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = arr[i] - minVal;
}
void removeFromMax( int arr[], int n)
{
int i, maxVal = arr[0];
for (i = 1; i < n; i++)
maxVal = max(maxVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = maxVal - arr[i];
}
void modifyArray( int arr[], int n, int k)
{
if (k % 2 == 0)
removeMin(arr, n);
else
removeFromMax(arr, n);
printArray(arr, n);
}
int main()
{
int arr[] = { 4, 8, 12, 16 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
modifyArray(arr, n, k);
return 0;
}
|
Java
class GFG {
static void printArray( int arr[], int n)
{
for ( int i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
}
static void removeMin( int arr[], int n)
{
int i, minVal = arr[ 0 ];
for (i = 1 ; i < n; i++)
minVal = Math.min(minVal, arr[i]);
for (i = 0 ; i < n; i++)
arr[i] = arr[i] - minVal;
}
static void removeFromMax( int arr[], int n)
{
int i, maxVal = arr[ 0 ];
for (i = 1 ; i < n; i++)
maxVal = Math.max(maxVal, arr[i]);
for (i = 0 ; i < n; i++)
arr[i] = maxVal - arr[i];
}
static void modifyArray( int arr[], int n, int k)
{
if (k % 2 == 0 )
removeMin(arr, n);
else
removeFromMax(arr, n);
printArray(arr, n);
}
public static void main(String args[])
{
int arr[] = { 4 , 8 , 12 , 16 };
int n = arr.length;
int k = 2 ;
modifyArray(arr, n, k);
}
}
|
Python3
def printArray(arr, n) :
for i in range (n) :
print (arr[i], end = " " );
def removeMin(arr, n) :
minVal = arr[ 0 ];
for i in range ( 1 , n) :
minVal = min (minVal, arr[i]);
for i in range (n) :
arr[i] = arr[i] - minVal;
def removeFromMax(arr, n) :
maxVal = arr[ 0 ];
for i in range ( 1 , n) :
maxVal = max (maxVal, arr[i]);
for i in range (n) :
arr[i] = maxVal - arr[i];
def modifyArray(arr, n, k) :
if (k % 2 = = 0 ) :
removeMin(arr, n);
else :
removeFromMax(arr, n);
printArray(arr, n);
if __name__ = = "__main__" :
arr = [ 4 , 8 , 12 , 16 ];
n = len (arr)
k = 2 ;
modifyArray(arr, n, k);
|
C#
using System;
class GFG {
static void printArray( int [] arr, int n)
{
for ( int i = 0; i < n; i++)
Console.Write(arr[i] + " " );
}
static void removeMin( int [] arr, int n)
{
int i, minVal = arr[0];
for (i = 1; i < n; i++)
minVal = Math.Min(minVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = arr[i] - minVal;
}
static void removeFromMax( int [] arr, int n)
{
int i, maxVal = arr[0];
for (i = 1; i < n; i++)
maxVal = Math.Max(maxVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = maxVal - arr[i];
}
static void modifyArray( int [] arr, int n, int k)
{
if (k % 2 == 0)
removeMin(arr, n);
else
removeFromMax(arr, n);
printArray(arr, n);
}
public static void Main(String[] args)
{
int [] arr = { 4, 8, 12, 16 };
int n = arr.Length;
int k = 2;
modifyArray(arr, n, k);
}
}
|
PHP
<?php
function printArray( $arr , $n )
{
for ( $i = 0; $i < $n ; $i ++)
echo $arr [ $i ] . " " ;
}
function removeMin(& $arr , $n )
{
$minVal = $arr [0];
for ( $i = 1; $i < $n ; $i ++)
$minVal = min( $minVal , $arr [ $i ]);
for ( $i = 0; $i < $n ; $i ++)
$arr [ $i ] = $arr [ $i ] - $minVal ;
}
function removeFromMax(& $arr , $n )
{
$maxVal = $arr [0];
for ( $i = 1; $i < $n ; $i ++)
$maxVal = max( $maxVal , $arr [ $i ]);
for ( $i = 0; $i < $n ; $i ++)
$arr [ $i ] = $maxVal - $arr [ $i ];
}
function modifyArray( $arr , $n , $k )
{
if ( $k % 2 == 0)
removeMin( $arr , $n );
else
removeFromMax( $arr , $n );
printArray( $arr , $n );
}
$arr = array ( 4, 8, 12, 16 );
$n = count ( $arr );
$k = 2;
modifyArray( $arr , $n , $k );
?>
|
Javascript
<script>
function printArray(arr, n)
{
for ( var i = 0; i < n; i++)
document.write(arr[i] + " " );
}
function removeMin(arr, n)
{
var i, minVal = arr[0];
for (i = 1; i < n; i++)
minVal = Math.min(minVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = arr[i] - minVal;
}
function removeFromMax(arr, n)
{
var i, maxVal = arr[0];
for (i = 1; i < n; i++)
maxVal = Math.max(maxVal, arr[i]);
for (i = 0; i < n; i++)
arr[i] = maxVal - arr[i];
}
function modifyArray(arr, n, k)
{
if (k % 2 == 0)
removeMin(arr, n);
else
removeFromMax(arr, n);
printArray(arr, n);
}
arr = [ 4, 8, 12, 16 ]
var n = arr.length;
var k = 2;
modifyArray(arr, n, k);
</script>
|
Time Complexity: O(n), where n represents the size of the given array.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Last Updated :
09 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...