Given an integer k and an array arr[], the task is to repeat the following operation exactly k times:
Find the minimum non-zero element in the array, print it and then subtract this number from all the non-zero elements of the array. If all the elements of the array are < 0, just print 0.
Examples:
Input: arr[] = {3, 6, 4, 2}, k = 5
Output: 2 1 1 2 0
k = 1; Pick 2 and update arr[] = {1, 4, 2, 0}
k = 2; Pick 1, arr[] = {0, 3, 1, 0}
k = 3; Pick 1, arr[] = {0, 2, 0, 0}
k = 4; Pick 2, arr[] = {0, 0, 0, 0}
k = 5; Nothing to pick so print 0
Input: arr[] = {1, 2}, k = 3
Output: 1 1 0
Approach: Sort the array and take an extra variable named sum which will store previous element which became 0.
Taking arr[] = {3, 6, 4, 2} and initially sum = 0 after sorting the array, it becomes arr[] = {2, 3, 4, 6}.
Now sum = 0, and we print first nonzero element i.e. 2 and assign sum = 2.
In the next iteration, pick second element i.e. 3 and print 3 – sum i.e. 1 as 2 has already been subtracted from all the other non-zero elements. Repeat these steps exactly k times.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
void operations( int arr[], int n, int k)
{
sort(arr, arr + n);
ll i = 0, sum = 0;
while (k--) {
while (i < n && arr[i] - sum == 0)
i++;
if (i < n && arr[i] - sum > 0) {
cout << arr[i] - sum << " " ;
sum = arr[i];
}
else
cout << 0 << endl;
}
}
int main()
{
int k = 5;
int arr[] = { 3, 6, 4, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
operations(arr, n, k);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void operations( int arr[], int n, int k)
{
Arrays.sort(arr);
int i = 0 , sum = 0 ;
while (k-- > 0 )
{
while (i < n && arr[i] - sum == 0 )
i++;
if (i < n && arr[i] - sum > 0 )
{
System.out.print(arr[i] - sum + " " );
sum = arr[i];
}
else
System.out.println( "0" );
}
}
public static void main(String args[])
{
int k = 5 ;
int arr[] = { 3 , 6 , 4 , 2 };
int n = arr.length;
operations(arr, n, k);
}
}
|
Python3
def operations(arr, n, k):
arr.sort();
i = 0 ; sum = 0 ;
while (k > 0 ):
while (i < n and arr[i] - sum = = 0 ):
i + = 1 ;
if (i < n and arr[i] - sum > 0 ):
print (arr[i] - sum , end = " " );
sum = arr[i];
else :
print ( 0 );
k - = 1 ;
k = 5 ;
arr = [ 3 , 6 , 4 , 2 ];
n = len (arr);
operations(arr, n, k);
|
C#
using System;
class GFG
{
static void operations( int []arr, int n, int k)
{
Array.Sort(arr);
int i = 0, sum = 0;
while (k-- > 0)
{
while (i < n && arr[i] - sum == 0)
i++;
if (i < n && arr[i] - sum > 0)
{
Console.Write(arr[i] - sum + " " );
sum = arr[i];
}
else
Console.WriteLine( "0" );
}
}
public static void Main(String []args)
{
int k = 5;
int []arr = { 3, 6, 4, 2 };
int n = arr.Length;
operations(arr, n, k);
}
}
|
Javascript
<script>
function operations(arr, n, k)
{
arr.sort();
let i = 0, sum = 0;
while (k-- > 0)
{
while (i < n && arr[i] - sum == 0)
i++;
if (i < n && arr[i] - sum > 0)
{
document.write(arr[i] - sum + " " );
sum = arr[i];
}
else
document.write( "0" );
}
}
let k = 5;
let arr = [ 3, 6, 4, 2 ];
let n = arr.length;
operations(arr, n, k);
</script>
|
Time Complexity: O(nlog(n)+n*k)
Auxiliary Space: O(1)
Last Updated :
01 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...