Given N sweets, which can be of many different types, and k customers, one customer won’t make the same type of sweet more than 2 pieces, the task is to find if it is possible to distribute all, then print “Yes” or otherwise “No”.
Given an array, arr[] represents an 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 : Yes Input : arr[] = {2, 3, 3, 5, 3, 3, 3}, k = 2; Output : No
Method 1:
- Traverse array for each element.
- Count occurrences of each element in the array
- Check if the result of each element must be less than or equal to 2*k.
Implementation:
C++
// C++ program for above implementation #include <bits/stdc++.h> 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[0]);
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
<?php // PHP program for above implementation // Function to check occurrence // of each element function checkCount( $arr , $n , $k )
{ $count ;
// Start traversing the elements
for ( $i = 0; $i < $n ; $i ++)
{
// Count occurrences of
// current element
$count = 0;
for ( $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;
} // 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. ?> |
Javascript
<script> // Javascript program for above implementation
// Function to check occurrence
// of each element
function checkCount(arr, n, k)
{
let count;
// Start traversing the elements
for (let i = 0; i < n; i++)
{
// Count occurrences of
// current element
count = 0;
for (let 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 ;
}
let arr = [ 1, 1, 2, 3, 1 ];
let n = arr.length;
let k = 2;
if (checkCount(arr, n, k))
document.write( "Yes" );
else
document.write( "No" );
</script> |
Output
Yes
Time Complexity: O(n^2)
Auxiliary Space: O(1)
Method 2:
- Maintain a hash for 32 different type of sweets.
- Traverse an array and check for every arr[i]
hash[arr[i]] <= 2*k.
Implementation:
C++
// C++ program for above implementation #include <bits/stdc++.h> 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[0]);
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 <Integer, Integer> 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 */ |
Javascript
// Function to check hash array // corresponding to the given array function checkCount(arr, n, k)
{ var hash = new Map();
// Maintain a hash
for ( var i=0; i < n; i++)
{
if (!hash.has(arr[i]))
{
hash.set(arr[i],0);
}
hash.set(arr[i],hash.get(arr[i]) + 1);
}
// Check for each value in hash
for (let [key, value] of hash)
{
if (value > 2 * k)
{
return false ;
}
return true ;
}
} // Driver code var arr = [1, 1, 2, 3, 1];
var n = arr.length;
var k = 2;
if (checkCount(arr, n, k))
{ console.log( "Yes" );
} else { console.log( "No" );
} // This code is contributed by Aarti_Rathi |
Output
Yes
Time Complexity: O(n)
Auxiliary Space: O(n)
Recommended Articles