# Maximum of sum of length of rectangles and squares formed by given sticks

• Difficulty Level : Medium
• Last Updated : 11 Jul, 2022

Given an array arr[] consisting of N integers, representing the length of the sticks, the task is to find the maximum sum possible of all lengths of the squares and rectangles constructed using these sticks.
Note A single side can be represented using only a single stick.

Examples:

Input: arr[] = {5, 3, 2, 3, 6, 3, 3}
Output: 12
Sum of length of Squares= 3 * 4 = 12
Sum of length of Rectangles = 0
Input: arr[] = {5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5 }
Output: 34
Sum of length of Squares = 5 * 4 = 20
Sum of length of Rectangles = 3 * 2 + 4 * 2 = 34

Approach: Follow the steps below to solve the problem:

• Traverse the array to count the frequencies of all the array elements, say freq.
• Count frequencies which are at least 2.
• Convert frequencies to nearest smaller even value.
• Convert the frequencies to single dimensional array in descending order.
• Now, sum elements upto indices which are multiples of 4.
• Print the sum all these elements

Below is the implementation of the above approach:

## C++14

 `#include ``using` `namespace` `std;` `// Function to find the maximum of sum``// of lengths of rectangles and squares``// formed using given set of sticks``void` `findSumLength(vector<``int``> arr,``int` `n)``{` `    ``// Stores the count of frequencies``    ``// of all the array elements``    ``map<``int``,``int``> freq;``    ``for``(``int` `i:arr) freq[i] += 1;` `    ``// Stores frequencies which are at least 2``    ``map<``int``,``int``> freq_2;` `    ``for` `(``auto` `i:freq)``    ``{``        ``if` `(freq[i.first] >= 2)``            ``freq_2[i.first] = freq[i.first];``    ``}``  ` `    ``// Convert all frequencies to nearest``    ``// smaller even values.``    ``vector<``int``> arr1;``    ``for` `(``auto` `i:freq_2)``        ``arr1.push_back((i.first) * (freq_2[(i.first)]/2)*2);``    ``sort(arr1.begin(), arr1.end());` `    ``// Sum of elements up to``    ``// index of multiples of 4``    ``int` `summ = 0;``    ``for` `(``int` `i:arr1)``        ``summ += i;` `    ``// Print the sum``    ``cout << summ;``}` `// Driver Code``int` `main()``{``  ``vector<``int``> arr = {5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5};``  ``int` `n = arr.size();``  ``findSumLength(arr, n);``  ``return` `0;``}` `// This code is contributed by mohit kumar 29.`

## Java

 `/*package whatever //do not write package name here */``import` `java.io.*;``import` `java.util.*;` `class` `GFG``{``  ` `  ``// Function to find the maximum of sum``  ``// of lengths of rectangles and squares``  ``// formed using given set of sticks``  ``static` `void` `findSumLength(``int``[] arr,``int` `n)``  ``{` `    ``// Stores the count of frequencies``    ``// of all the array elements``    ``HashMapfreq = ``new` `HashMap();``    ``for``(``int` `i:arr) {``      ``if``(freq.containsKey(i)){``        ``freq.put(i, freq.get(i)+``1``);``      ``}``      ``else``{``        ``freq.put(i, ``1``);``      ``}``    ``}` `    ``// Stores frequencies which are at least 2``    ``HashMapfreq_2 = ``new` `HashMap();` `    ``for` `(Map.Entry i:freq.entrySet())``    ``{``      ``if` `(i.getValue() >= ``2``)``        ``freq_2.put(i.getKey() , i.getValue());``    ``}` `    ``// Convert all frequencies to nearest``    ``// smaller even values.``    ``ArrayListarr1 = ``new` `ArrayList();``    ``for` `(Map.Entry i:freq_2.entrySet()){``      ``arr1.add((i.getKey()) * (i.getValue()/``2``)*``2``);``    ``}``    ``Collections.sort(arr1);`  `    ``// Sum of elements up to``    ``// index of multiples of 4``    ``int` `summ = ``0``;``    ``for` `(``int` `i:arr1)``      ``summ += i;` `    ``// Print the sum``    ``System.out.println(summ);``  ``}` `  ``// Driver code``  ``public` `static` `void` `main(String args[])``  ``{``    ``int``[] arr = {``5``, ``3``, ``2``, ``3``, ``6``, ``4``, ``4``, ``4``, ``5``, ``5``, ``5``};``    ``int` `n = arr.length;``    ``findSumLength(arr, n);``  ``}``}` `// This code is contributed by shinjanpatra`

## Python3

 `# Python3 implementation of``# the above approach ` `from` `collections ``import` `Counter` `# Function to find the maximum of sum``# of lengths of rectangles and squares``# formed using given set of sticks``def` `findSumLength(arr, n) : ``    ` `    ``# Stores the count of frequencies``    ``# of all the array elements``    ``freq ``=` `dict``(Counter(arr))``    ` `    ``# Stores frequencies which are at least 2``    ``freq_2 ``=` `{}` `    ``for` `i ``in` `freq:``        ``if` `freq[i]>``=` `2``:``            ``freq_2[i] ``=` `freq[i]``            ` `    ``# Convert all frequencies to nearest``    ``# smaller even values.``    ``arr1 ``=` `[]``    ``for` `i ``in` `freq_2:``      ``arr1.extend([i]``*``(freq_2[i]``/``/``2``)``*``2``)` `    ``# Sort the array in descending order``    ``arr1.sort(reverse ``=` `True``)` `    ``# Sum of elements up to``    ``# index of multiples of 4``    ``summ ``=` `0``    ``for` `i ``in` `range``((``len``(arr1)``/``/``4``)``*``4``):``        ``summ``+``=` `arr1[i]``        ` `    ``# Print the sum``    ``print``(summ)``  ` `# Driver Code ``if` `__name__ ``=``=` `"__main__"` `: ``  ` `    ``arr ``=` `[``5``, ``3``, ``2``, ``3``, ``6``, ``4``, ``4``, ``4``, ``5``, ``5``, ``5``]; ``    ``n ``=` `len``(arr); ``    ``findSumLength(arr, n);`

## C#

 `using` `System;``using` `System.Collections.Generic;``class` `GFG{` `  ``// Function to find the maximum of sum``  ``// of lengths of rectangles and squares``  ``// formed using given set of sticks``  ``static` `void` `findSumLength(List<``int``> arr, ``int` `n)``  ``{` `    ``// Stores the count of frequencies``    ``// of all the array elements``    ``Dictionary<``int``,``int``> freq = ``new` `Dictionary<``int``,``int``>();``    ``foreach` `(``int` `i ``in` `arr){``      ``if``(freq.ContainsKey(i))``        ``freq[i] += 1;``      ``else``        ``freq[i] = 1;``    ``}` `    ``// Stores frequencies which are at least 2``    ``Dictionary<``int``,``int``> freq_2 = ``new` `Dictionary<``int``,``int``>();``    ``foreach``(KeyValuePair<``int``, ``int``> entry ``in` `freq)``    ``{``      ``if` `(freq[entry.Key] >= 2)``        ``freq_2[entry.Key] = freq[entry.Key];``    ``}` `    ``// Convert all frequencies to nearest``    ``// smaller even values.``    ``List<``int``> arr1 = ``new` `List<``int``>();``    ``foreach``(KeyValuePair<``int``, ``int``> entry ``in` `freq_2)``      ``arr1.Add(entry.Key * (freq_2[entry.Key]/2)*2);``    ``arr1.Sort();` `    ``// Sum of elements up to``    ``// index of multiples of 4``    ``int` `summ = 0;``    ``foreach` `(``int` `i ``in` `arr1){``      ``summ += i;``    ``}``    ` `    ``// Print the sum``    ``Console.WriteLine(summ);``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main()``  ``{``    ``List<``int``> arr = ``new` `List<``int``>(){5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5};``    ``int` `n = arr.Count;``    ``findSumLength(arr, n);` `  ``}``}` `// THIS CODE IS CONTRIBUTED BY SURENDRA_GANGWAR.`

## Javascript

 ``

Output:

`34`

Time Complexity: O(NlogN)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up