Minimum number of Bottles visible when a bottle can be enclosed inside another Bottle
Given N bottles. The ith bottle has A[i] radius. Once a bottle is enclosed inside another bottle, it ceases to be visible. The task is to minimize the number of visible bottles. You can put the ith bottle into a jth bottle if the following condition is fulfilled.
- ith bottle itself is not enclosed in another bottle.
- jth bottle does not enclose any other bottle.
- Radius of bottle i is smaller than bottle j ( i.e. A[i] < A[j] ).
Examples:
Input :
8
1 1 2 3 4 5 5 4
Output :
2
Explanation:
1 -> 2 [1, 2, 3, 4, 5, 5, 4]
2 -> 3 [1, 3, 4, 5, 5, 4]
3 -> 4 [1, 4, 5, 5, 4]
4 -> 5 [1, 5, 5, 4]
1 -> 4 [5, 5, 4]
4 -> 5 [5, 5]
Finally, there are 2 bottles
left which are visible.
Hence the answer is 2.
Approach: If you carefully observe, you will find that the number of minimum visible bottles will be equal to the maximum number of repeated bottles. Here intuition is, as these repeated bottles cannot be fit in single bigger bottle hence we require at least as many bigger bottles as the number of repeated bottles.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void min_visible_bottles( int * arr, int n)
{
map< int , int > m;
int ans = 0;
for ( int i = 0; i < n; i++) {
m[arr[i]]++;
ans = max(ans, m[arr[i]]);
}
cout << "Minimum number of "
<< "Visible Bottles are: "
<< ans << endl;
}
int main()
{
int n = 8;
int arr[] = { 1, 1, 2, 3, 4, 5, 5, 4 };
min_visible_bottles(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void min_visible_bottles( int [] arr, int n)
{
HashMap<Integer,
Integer> mp = new HashMap<Integer,
Integer>();
int ans = 0 ;
for ( int i = 0 ; i < n; i++)
{
if (mp.containsKey(arr[i]))
{
mp.put(arr[i], mp.get(arr[i]) + 1 );
}
else
{
mp.put(arr[i], 1 );
}
ans = Math.max(ans, mp.get(arr[i]));
}
System.out.print( "Minimum number of " +
"Visible Bottles are: " +
ans + "\n" );
}
public static void main(String[] args)
{
int n = 8 ;
int arr[] = { 1 , 1 , 2 , 3 , 4 , 5 , 5 , 4 };
min_visible_bottles(arr, n);
}
}
|
Python3
def min_visible_bottles(arr, n):
m = dict ()
ans = 0
for i in range (n):
m[arr[i]] = m.get(arr[i], 0 ) + 1
ans = max (ans, m[arr[i]])
print ( "Minimum number of" ,
"Visible Bottles are: " , ans)
n = 8
arr = [ 1 , 1 , 2 , 3 , 4 , 5 , 5 , 4 ]
min_visible_bottles(arr, n)
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static void min_visible_bottles( int [] arr, int n)
{
Dictionary< int ,
int > mp = new Dictionary< int ,
int >();
int ans = 0;
for ( int i = 0; i < n; i++)
{
if (mp.ContainsKey(arr[i]))
{
mp[arr[i]] = mp[arr[i]] + 1;
}
else
{
mp.Add(arr[i], 1);
}
ans = Math.Max(ans, mp[arr[i]]);
}
Console.Write( "Minimum number of " +
"Visible Bottles are: " +
ans + "\n" );
}
public static void Main(String[] args)
{
int n = 8;
int []arr = { 1, 1, 2, 3, 4, 5, 5, 4 };
min_visible_bottles(arr, n);
}
}
|
Javascript
<script>
function min_visible_bottles(arr, n) {
let m = new Map();
let ans = 0;
for (let i = 0; i < n; i++) {
if (m.has(arr[i])){
m.set(arr[i], m.get(arr[i]) + 1)
} else {
m.set(arr[i], 1)
}
ans = Math.max(ans, m.get(arr[i]));
}
document.write( "Minimum number of " +
"Visible Bottles are: " + ans + "<br>" );
}
let n = 8;
let arr = [1, 1, 2, 3, 4, 5, 5, 4];
min_visible_bottles(arr, n);
</script>
|
Output:
Minimum number of Visible Bottles are: 2
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Last Updated :
07 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...