Subtraction in the Array

13 Jun, 2022
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++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;#define ll long long int // Function to perform the given operation on arr[]void operations(int arr[], int n, int k){    sort(arr, arr + n);    ll i = 0, sum = 0;    while (k--) {         // Skip elements which are 0        while (i < n && arr[i] - sum == 0)            i++;         // Pick smallest non-zero element        if (i < n && arr[i] - sum > 0) {            cout << arr[i] - sum << " ";            sum = arr[i];        }         // If all the elements of arr[] are 0        else            cout << 0 << endl;    }} // Driver codeint main(){    int k = 5;    int arr[] = { 3, 6, 4, 2 };    int n = sizeof(arr) / sizeof(arr[0]);    operations(arr, n, k);    return 0;}
// Java implementation of the approachimport java.util.*; class GFG{ // Function to perform the given operation on arr[]static void operations(int arr[], int n, int k){    Arrays.sort(arr);    int i = 0, sum = 0;    while (k-- > 0)    {         // Skip elements which are 0        while (i < n && arr[i] - sum == 0)            i++;         // Pick smallest non-zero element        if (i < n && arr[i] - sum > 0)        {            System.out.print(arr[i] - sum + " ");            sum = arr[i];        }         // If all the elements of arr[] are 0        else            System.out.println("0");    }} // Driver codepublic static void main(String args[]){    int k = 5;    int arr[] = { 3, 6, 4, 2 };    int n = arr.length;    operations(arr, n, k);}} // This code is contributed by Princi Singh
     # Python implementation of the approach # Function to perform the given operation on arr[]def operations(arr, n, k):    arr.sort();    i = 0; sum = 0;    while (k > 0):         # Skip elements which are 0        while (i < n and arr[i] - sum == 0):            i+=1;         # Pick smallest non-zero element        if (i < n and arr[i] - sum > 0):            print(arr[i] - sum, end= " ");            sum = arr[i];         # If all the elements of arr[] are 0        else:            print(0);        k-=1;         # Driver codek = 5;arr = [ 3, 6, 4, 2 ];n = len(arr);operations(arr, n, k); # This code is contributed by PrinciRaj1992
// C# implementation of the approachusing System;     class GFG{ // Function to perform the given operation on arr[]static void operations(int []arr, int n, int k){    Array.Sort(arr);    int i = 0, sum = 0;    while (k-- > 0)    {         // Skip elements which are 0        while (i < n && arr[i] - sum == 0)            i++;         // Pick smallest non-zero element        if (i < n && arr[i] - sum > 0)        {            Console.Write(arr[i] - sum + " ");            sum = arr[i];        }         // If all the elements of arr[] are 0        else            Console.WriteLine("0");    }} // Driver codepublic static void Main(String []args){    int k = 5;    int []arr = { 3, 6, 4, 2 };    int n = arr.Length;    operations(arr, n, k);}} // This code has been contributed by 29AjayKumar
<script> // JavaScript program implementation of the approach // Function to perform the given operation on arr[]function operations(arr, n, k){    arr.sort();    let i = 0, sum = 0;    while (k-- > 0)    {           // Skip elements which are 0        while (i < n && arr[i] - sum == 0)            i++;           // Pick smallest non-zero element        if (i < n && arr[i] - sum > 0)        {            document.write(arr[i] - sum + " ");            sum = arr[i];        }           // If all the elements of arr[] are 0        else            document.write("0");    }} // Driver code             let k = 5;    let arr = [ 3, 6, 4, 2 ];    let n = arr.length;    operations(arr, n, k);   </script>
2 1 1 2 0
 
Time Complexity: O(nlog(n)+n*k)Auxiliary Space: O(1)
princi singh
29AjayKumar
princiraj1992
splevel62
pushpeshrajdx01
array-traversal-question
Arrays
Sorting
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Window Sliding Technique
Search, insert and delete in an unsorted array
What is Data Structure: Types, Classifications and Applications
Chocolate Distribution Problem
Merge Sort
Bubble Sort Algorithm
QuickSort
Insertion Sort
Selection Sort Algorithm