Horje
Reduce the Array to 0 by decreasing elements by 1 or replacing at most K elements by 0

Given an array arr[] of N integers and a positive integer K, the task is to find the minimum number of operations required to reduce all array elements to 0 such that in each operation reduce any array element by 1 and independently at most K array element can be reduced to 0.

Examples:

Input: arr[] = {4, 1, 5}, K = 1
Output: 5
Explanation: Following are the operations performed to convert all array elements to 0:
Here K = 1, So replace arr[2] by 0, converts arr[] to {4, 1, 0} –> Number of operations = 0.
Decrease arr[1] by 1, converts arr[] to {4, 0, 0} –>  Number of operations = 1.
Decrease arr[0] by 1 four times, converts arr[] to {0, 0, 0} –>  Number of operations = 4.
Therefore, total number of operations = 0 + 1 + 4 = 5, which is minimum possible.

Input: arr[] = {4, 2, 10, 9, 18}, K = 2
Output: 15

Approach: The given problem can be solved by using the Greedy Approach which is based on the idea is that first sort the given array arr[] in non-decreasing order and then update the K largest element to 0 and perform the given operation on the remaining array elements. Follow the steps below to solve the given problem:

  • If the value of N is at most K, then replace all array elements with 0. Therefore the number of operations required in this case will be 0.
  • Sort the array arr[] in non-decreasing order.
  • Replace last K elements by 0.
  • Print the sum of the first (N – K) elements as the resultant count of operations.

Below is the implementation of the above approach:

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum number
// operations needed to convert all the
// array elements to 0
int minOperations(vector<int> arr,
                  int K, int N)
{
 
    // If K is greater than 0 then
    // replace all array elements to 0
    if (K >= N)
        return 0;
 
    // Sort array in non-decreasing order
    sort(arr.begin(), arr.end());
 
    // Stores the count of operations
    // required
    int countOperations = 0;
 
    // Iterate loop until N - K times
    for (int i = 0; i < N - K; i++) {
 
        // Take sum of elements
        countOperations += arr[i];
    }
 
    // Return countOperations as
    // the required answer
    return countOperations;
}
 
// Driver Code
int main()
{
 
    vector<int> arr{ 4, 1, 5 };
    int N = arr.size();
    int K = 1;
 
    cout << minOperations(arr, K, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.Arrays;
 
public class GFG {
     
    // Function to find the minimum number
    // operations needed to convert all the
    // array elements to 0
    static int minOperations(int []arr,
                      int K, int N)
    {
     
        // If K is greater than 0 then
        // replace all array elements to 0
        if (K >= N)
            return 0;
     
        // Sort array in non-decreasing order
        Arrays.sort(arr) ;
     
        // Stores the count of operations
        // required
        int countOperations = 0;
     
        // Iterate loop until N - K times
        for (int i = 0; i < N - K; i++) {
     
            // Take sum of elements
            countOperations += arr[i];
        }
     
        // Return countOperations as
        // the required answer
        return countOperations;
    }
 
    // Driver Code
    public static void main (String[] args)
    {
     
        int[] arr = { 4, 1, 5 };
        int N = arr.length;
        int K = 1;
     
        System.out.println(minOperations(arr, K, N));
    }
 
}
 
// This code is contributed by AnkThon

Python3

# Python3 program for the above approach
 
# Function to find the minimum number
# operations needed to convert all the
# array elements to 0
def minOperations(arr, K, N) :
 
    # If K is greater than 0 then
    # replace all array elements to 0
    if (K >= N) :
        return 0;
 
    # Sort array in non-decreasing order
    arr.sort();
 
    # Stores the count of operations
    # required
    countOperations = 0;
 
    # Iterate loop until N - K times
    for i in range(N - K) :
 
        # Take sum of elements
        countOperations += arr[i];
 
    # Return countOperations as
    # the required answer
    return countOperations;
 
# Driver Code
if __name__ == "__main__" :
 
 
    arr = [ 4, 1, 5 ];
    N = len(arr);
    K = 1;
 
    print(minOperations(arr, K, N));
     
    # This code is contributed by AnkThon

C#

// C# program for the above approach
using System;
 
public class GFG
{
     
    // Function to find the minimum number
    // operations needed to convert all the
    // array elements to 0
    static int minOperations(int []arr,
                      int K, int N)
    {
     
        // If K is greater than 0 then
        // replace all array elements to 0
        if (K >= N)
            return 0;
     
        // Sort array in non-decreasing order
        Array.Sort(arr) ;
     
        // Stores the count of operations
        // required
        int countOperations = 0;
     
        // Iterate loop until N - K times
        for (int i = 0; i < N - K; i++) {
     
            // Take sum of elements
            countOperations += arr[i];
        }
     
        // Return countOperations as
        // the required answer
        return countOperations;
    }
 
    // Driver Code
    public static void Main (string[] args)
    {
     
        int[] arr = { 4, 1, 5 };
        int N = arr.Length;
        int K = 1;
     
        Console.WriteLine(minOperations(arr, K, N));
    }
}
 
// This code is contributed by AnkThon

Javascript

<script>
// Javascript program for the above approach
 
// Function to find the minimum number
// operations needed to convert all the
// array elements to 0
function minOperations(arr, K, N)
{
 
  // If K is greater than 0 then
  // replace all array elements to 0
  if (K >= N) return 0;
 
  // Sort array in non-decreasing order
  arr.sort((a, b) => a - b);
 
  // Stores the count of operations
  // required
  let countOperations = 0;
 
  // Iterate loop until N - K times
  for (let i = 0; i < N - K; i++) {
    // Take sum of elements
    countOperations += arr[i];
  }
 
  // Return countOperations as
  // the required answer
  return countOperations;
}
 
// Driver Code
 
let arr = [4, 1, 5];
let N = arr.length;
let K = 1;
 
document.write(minOperations(arr, K, N));
 
// This code is contributed by saurabh_jaiswal.
</script>

Output: 

5

 

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




Reffered: https://www.geeksforgeeks.org


Arrays

Related
Count of pairs in Array with difference equal to the difference with digits reversed Count of pairs in Array with difference equal to the difference with digits reversed
Longest non-decreasing subsequence having difference between adjacent elements less than D Longest non-decreasing subsequence having difference between adjacent elements less than D
Java Program to Inplace rotate square matrix by 90 degrees | Set 1 Java Program to Inplace rotate square matrix by 90 degrees | Set 1
PHP Program to Find Maximum Value of Sum ( i*arr[i]) with Only Rotations on Given Array Allowed PHP Program to Find Maximum Value of Sum ( i*arr[i]) with Only Rotations on Given Array Allowed
Java Program for Search an element in a sorted and rotated array Java Program for Search an element in a sorted and rotated array

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
10