# Maximize removals of balls of at least two different types

• Last Updated : 24 Jun, 2021

Given an array arr[] of size 3 denoting the number of balls of type 1, 2, and 3 respectively, the task is to find the maximum number of moves that can be performed if in one move, three balls, out of which at least 2 balls of different types, are removed.

Examples:

Input: arr[] = {2, 3, 3}
Output: 2
Explanation:
Move 1: Remove 1 ball of each type. Therefore, arr[] becomes {1, 2, 2}.
Move 2: Remove 1 ball of each type. Therefore, arr[] becomes {0, 1, 1}.
No further moves can be performed.

Input: arr[] = {100, 1, 2}
Output: 3
Explanation:
Move 1: Remove 1 ball of type 2 and 2 balls of type 1. Therefore, arr[] becomes {98, 0, 2}.
Move 2: Remove 1 ball of type 3 and 2 balls of type 1. Therefore, arr[] becomes {96, 0, 1}.
Move 3: Remove 1 ball of type 3 and 2 balls of type 1. Therefore, arr[] becomes {94, 0, 0}.
No further moves can be performed.

Approach: The idea to sort the array in increasing order and then arises two cases:

• If arr is smaller than 2 * (arr + arr), the answer will be (arr + arr + arr) / 3.
• If arr is greater than 2 * (arr + arr), the answer will be arr + arr.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find maximum moves that``// can be performed if in each move 3``// balls of different types are removed``void` `findMoves(``int` `arr[])``{``    ``// Sort the array in increasing order``    ``sort(arr, arr + 3);` `    ``// Print the answer``    ``cout << (min(arr + arr,``                 ``(arr + arr + arr) / 3));``}` `// Driver Code``int` `main()``{``    ``// Given Input``    ``int` `arr = { 2, 3, 3 };` `    ``// Function Call``    ``findMoves(arr);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.Arrays;  ` `class` `GFG{``    ` `// Function to find maximum moves that``// can be performed if in each move 3``// balls of different types are removed``static` `void` `findMoves(``int` `arr[])``{``    ` `    ``// Sort the array in increasing order``    ``Arrays.sort(arr);` `    ``// Print the answer``    ``System.out.println(Math.min(arr[``0``] + arr[``1``],``                               ``(arr[``0``] + arr[``1``] +``                                ``arr[``2``]) / ``3``));``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ` `    ``// Given Input``    ``int` `arr[] = { ``2``, ``3``, ``3` `};` `    ``// Function Call``    ``findMoves(arr);``}``}` `// This code is contributed by AnkThon`

## Python3

 `# Python3 program for the above approach` `# Function to find maximum moves that``# can be performed if in each move 3``# balls of different types are removed``def` `findMoves(arr):``    ` `    ``# Sort the array in increasing order``    ``arr ``=` `sorted``(arr)` `    ``# Print the answer``    ``print` `(``min``(arr[``0``] ``+` `arr[``1``],``              ``(arr[``0``] ``+` `arr[``1``] ``+``               ``arr[``2``]) ``/``/` `3``))` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``# Given Input``    ``arr ``=` `[ ``2``, ``3``, ``3` `]` `    ``# Function Call``    ``findMoves(arr)` `# This code is contributed by mohit kumar 29`

## C#

 `// Java program for the above approach``using` `System;  ``class` `GFG``{``    ` `// Function to find maximum moves that``// can be performed if in each move 3``// balls of different types are removed``static` `void` `findMoves(``int` `[]arr)``{``    ` `    ``// Sort the array in increasing order``    ``Array.Sort(arr);` `    ``// Print the answer``    ``Console.Write(Math.Min(arr + arr,``                               ``(arr + arr +``                                ``arr) / 3));``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ` `    ``// Given Input``    ``int` `[]arr = { 2, 3, 3 };` `    ``// Function Call``    ``findMoves(arr);``}``}` `// This code is contributed by shivanisinghss2110`

## Javascript

 ``

Output:

`2`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up