# Distributing items when a person cannot take more than two items of same type

Given N sweets which can be of many different types and k customers, one customer won’t take the same type of sweet more than 2 pieces, the task is to find if it is possible to distribute all sweets then print “Yes” otherwise “No”.

Given array arr[] represents array of sweets arr[i] is type of sweet.

Examples:

```Input : arr[] = {1, 1, 2, 3, 1},
k = 2;
Output : Yes
There are three pieces of sweet type 1,
one piece of type 2 and one piece of
type 3. Two customers can distribute
sweets under given constraints.

Input : arr[] = {2, 3, 3, 5, 3, 3},
k = 2;
Output : No
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1:
1- Traverse array for each element.
2- Count occurrences of each element in array
3- Check Resulting occurrence of each element must be less than or equal to 2*k.

## C++

 `// C++ program for above implementation ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check occurrence of each element ` `bool` `checkCount(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``int` `count; ` ` `  `    ``// Start traversing the elements ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// Count occurrences of current element ` `        ``count = 0; ` `        ``for` `(``int` `j = 0; j < n; j++) { ` `            ``if` `(arr[j] == arr[i]) ` `                ``count++; ` ` `  `            ``// If count of any element is greater ` `            ``// than 2*k then return false ` `            ``if` `(count > 2 * k) ` `                ``return` `false``; ` `        ``} ` `    ``} ` ` `  `    ``return` `true``; ` `} ` ` `  `// Drivers code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 1, 2, 3, 1 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``int` `k = 2; ` `    ``checkCount(arr, n, k) ? cout << ``"Yes"` `                           ``: cout << ``"No"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `// java program for above implementation ` `import` `java.io.*; ` ` `  `public` `class` `GFG { ` `     `  `    ``// Function to check occurrence of ` `    ``// each element ` `    ``static` `boolean` `checkCount(``int` `[]arr, ` `                            ``int` `n, ``int` `k) ` `    ``{ ` `        ``int` `count; ` `     `  `        ``// Start traversing the elements ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``{ ` `     `  `            ``// Count occurrences of ` `            ``// current element ` `            ``count = ``0``; ` `            ``for` `(``int` `j = ``0``; j < n; j++) ` `            ``{ ` `                ``if` `(arr[j] == arr[i]) ` `                    ``count++; ` `     `  `                ``// If count of any element ` `                ``// is greater than 2*k then ` `                ``// return false ` `                ``if` `(count > ``2` `* k) ` `                    ``return` `false``; ` `            ``} ` `        ``} ` `     `  `        ``return` `true``; ` `    ``} ` `     `  `    ``// Drivers code ` `    ``static` `public` `void` `main (String[] args) ` `    ``{ ` `        ``int` `[]arr = { ``1``, ``1``, ``2``, ``3``, ``1` `}; ` `        ``int` `n = arr.length; ` `        ``int` `k = ``2``; ` `         `  `        ``if``(checkCount(arr, n, k))  ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## Python3

 `# Python 3 program for above implementation  ` ` `  `# Function to check occurrence  ` `# of each element  ` `def` `checkCount(arr, n, k): ` ` `  `    ``# Start traversing the elements  ` `    ``for` `i ``in` `range``(n): ` ` `  `        ``# Count occurrences of  ` `        ``# current element  ` `        ``count ``=` `0` `        ``for` `j ``in` `range``(n): ` `            ``if` `arr[j] ``=``=` `arr[i]: ` `                ``count ``+``=` `1` ` `  `            ``# If count of any element is greater  ` `            ``# than 2*k then return false  ` `            ``if` `count > ``2` `*` `k: ` `                ``return` `False` `    ``return` `True` ` `  `# Driver code ` `arr ``=` `[``1``, ``1``, ``2``, ``3``, ``1``] ` `n ``=` `len``(arr) ` `k ``=` `2` `if` `checkCount(arr, n, k) ``=``=` `True``: ` `    ``print``(``"Yes"``) ` `else``: ` `    ``print``(``"No"``) ` ` `  `# This code is contributed by Shrikant13 `

## C#

 `// C# program for above implementation ` `using` `System; ` ` `  `public` `class` `GFG { ` `     `  `    ``// Function to check occurrence ` `    ``// of each element ` `    ``static` `bool` `checkCount(``int` `[]arr, ` `                          ``int` `n, ``int` `k) ` `    ``{ ` `        ``int` `count; ` `     `  `        ``// Start traversing the elements ` `        ``for` `(``int` `i = 0; i < n; i++) ` `        ``{ ` `     `  `            ``// Count occurrences of ` `            ``// current element ` `            ``count = 0; ` `            ``for` `(``int` `j = 0; j < n; j++) ` `            ``{ ` `                ``if` `(arr[j] == arr[i]) ` `                    ``count++; ` `     `  `                ``// If count of any element  ` `                ``// is greater than 2*k then ` `                ``// return false ` `                ``if` `(count > 2 * k) ` `                    ``return` `false``; ` `            ``} ` `        ``} ` `     `  `        ``return` `true``; ` `    ``} ` `     `  `    ``// Drivers code ` `    ``static` `public` `void` `Main () ` `    ``{ ` `        ``int` `[]arr = { 1, 1, 2, 3, 1 }; ` `        ``int` `n = arr.Length; ` `        ``int` `k = 2; ` `         `  `        ``if``(checkCount(arr, n, k))  ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` 2 * ``\$k``) ` `                ``return` `false; ` `        ``} ` `    ``} ` ` `  `    ``return` `true; ` `} ` ` `  `    ``// Driver Code ` `    ``\$arr` `= ``array``(1, 1, 2, 3, 1); ` `    ``\$n` `=``count``(``\$arr``); ` `    ``\$k` `= 2; ` `    ``if``(checkCount(``\$arr``, ``\$n``, ``\$k``)) ` `        ``echo` `"Yes"``; ` `    ``else` `        ``echo` `"No"``; ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output:

`Yes`

Time Complexity: O(n^2)

Method 2:
1. Maintain a hash for 32 different type of sweets.
2. Traverse an array and check for every arr[i]

`hash[arr[i]] <= 2*k. `

## C++

 `// C++ program for above implementation ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check hash array ` `// corresponding to the given array ` `bool` `checkCount(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``unordered_map<``int``, ``int``> hash; ` ` `  `    ``// Maintain a hash ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``hash[arr[i]]++; ` ` `  `    ``// Check for each value in hash ` `    ``for` `(``auto` `x : hash) ` `        ``if` `(x.second > 2 * k) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Drivers code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 1, 2, 3, 1 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``int` `k = 2; ` `    ``checkCount(arr, n, k) ? cout << ``"Yes"` `                           ``: cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program for above implementation ` `import` `java.util.HashMap; ` `import` `java.util.Map; ` ` `  `class` `GfG ` `{ ` ` `  `    ``// Function to check hash array  ` `    ``// corresponding to the given array  ` `    ``static` `boolean` `checkCount(``int` `arr[], ``int` `n, ``int` `k)  ` `    ``{  ` `        ``HashMap hash = ``new` `HashMap<>();  ` `     `  `        ``// Maintain a hash  ` `        ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``{ ` `            ``if` `(!hash.containsKey(arr[i])) ` `                ``hash.put(arr[i], ``0``); ` `            ``hash.put(arr[i], hash.get(arr[i]) + ``1``); ` `        ``} ` `     `  `        ``// Check for each value in hash  ` `        ``for` `(Map.Entry x : hash.entrySet()) ` `            ``if` `((``int``)x.getValue() > ``2` `* k)  ` `                ``return` `false``;  ` `     `  `        ``return` `true``;  ` `    ``}  ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `         `  `        ``int` `arr[] = { ``1``, ``1``, ``2``, ``3``, ``1` `};  ` `        ``int` `n = arr.length;  ` `        ``int` `k = ``2``;  ` `        ``if` `(checkCount(arr, n, k))  ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Rituraj Jain `

## Python3

 `# Python3 program for above implementation  ` `from` `collections ``import` `defaultdict ` ` `  `# Function to check hash array  ` `# corresponding to the given array  ` `def` `checkCount(arr, n, k): ` ` `  `    ``mp ``=` `defaultdict(``lambda``:``0``) ` ` `  `    ``# Insert all array elements in ` `    ``# hash table Maintain a hash ` `    ``for` `i ``in` `range``(n): ` `        ``mp[arr[i]] ``+``=` `1` ` `  `    ``# Check for each value in hash ` `    ``for` `key, values ``in` `mp.items(): ` `        ``if` `values > ``2` `*` `k: ` `            ``return` `False` `    ``return` `True` ` `  `# Driver code ` `arr ``=` `[ ``1``, ``1``, ``2``, ``3``, ``1` `] ` `n ``=` `len``(arr) ` `k ``=` `2` `if` `checkCount(arr, n, k) ``=``=` `True``: ` `    ``print``(``"Yes"``) ` `else``: ` `    ``print``(``"No"``) ` ` `  `# This code is contributed by Shrikant13  `

## C#

 `// C# program for above implementation ` `using` `System;  ` `using` `System.Collections.Generic; ` ` `  `class` `GfG ` `{ ` ` `  `    ``// Function to check hash array  ` `    ``// corresponding to the given array  ` `    ``static` `Boolean checkCount(``int` `[]arr, ``int` `n, ``int` `k)  ` `    ``{  ` `        ``Dictionary<``int``,``int``> hash = ``new` `Dictionary<``int``,``int``>();  ` `     `  `        ``// Maintain a hash  ` `        ``for` `(``int` `i = 0; i < n; i++) ` `        ``{ ` `            ``if``(hash.ContainsKey(arr[i])) ` `            ``{ ` `                ``var` `val = hash[arr[i]]; ` `                ``hash.Remove(arr[i]); ` `                ``hash.Add(arr[i], val + 1);  ` `            ``} ` `            ``else` `            ``{ ` `                ``hash.Add(arr[i], 0); ` `            ``} ` `        ``} ` `     `  `        ``// Check for each value in hash  ` `        ``foreach``(KeyValuePair<``int``, ``int``> x ``in` `hash) ` `            ``if` `((``int``)x.Value > 2 * k)  ` `                ``return` `false``;  ` `     `  `        ``return` `true``;  ` `    ``}  ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String []args) ` `    ``{ ` `         `  `        ``int` `[]arr = { 1, 1, 2, 3, 1 };  ` `        ``int` `n = arr.Length;  ` `        ``int` `k = 2;  ` `        ``if` `(checkCount(arr, n, k))  ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` `    ``} ` `} ` ` `  `/* This code is contributed by PrinciRaj1992 */`

Output:

`Yes`

Time Complexity: O(n)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.