×

Number of visible boxes putting one inside another

You have given one array, which consists of values which represent the sizes of different boxes. We can put one box inside another if the size of the outside box is two times or greater than inside box. You have to find out the number of boxes which are at last visible. Let’s take an example -

Number Of Visible Boxes Putting One Inside Another

For the above diagram, we have three boxes, and their sizes are 2, 3, and 4.

Input-  

2, 3, 4

Output-

2

Explanation- We can put box 2 inside of 4 because its size is greater than 2. Now remaining boxes are 3 and 4. So, the number of boxes is 2.

Algorithm:-

Step 1: Start

Step 2: The value which represents the number of boxes is taken from the user.

Step 3: An array is created of size n. Then values of the array are taken from the user.

Step 4: A function is called to calculate the answer.

Step 5: In this function, we take the input value and the array.

Step 6: The answer is calculated.

Step 7: The value of the answer is returned.

Step 8: The returned value will be printed.

Step 9: Stop.

Explanation of Algorithm: - To solve this problem, we will sort the array. In the function, we create a queue to represent the element which will be visible at the end. We simply traverse the array, and if any element is found which is greater than the front element of the queue, then the front element will be deleted. After the ending of traversal, we get the elements which will be visible. The answer will be the size of the queue.

Code: -

// program in cpp to calculate the number of remaining boxes after putting one inside another.
#include <bits/stdc++.h>
using namespace std;
int fun (int array[], int n)
{
	queue<int> q;
	sort(array, array + n);
	q.push(array[0]);
	for (int i = 1; i < n; i++) {


		int now = q.front();
// deletion of front element of queue if the traversing element is double times or 
//greater than queue
		if (array[i] >= 2 * now)
			q.pop();
		q.push (array[i]);
	}


	return q.size();
}
int main()
{
	int arr[] = { 2, 3, 4};
	int n = sizeof(arr) / sizeof(arr[0]);
	cout << fun(arr, n) << endl;
	return 0;
}

Program in Java

// program in java to calculate the number of remaining boxes after putting one inside another.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Arrays;
public class jtp {
	static int minimumBox(int []arr, int n)
	{		
		Queue<Integer> q = new LinkedList<>();	
		Arrays.sort(arr);	
		q.add(arr[0]);		
		for (int i = 1; i < n; i++)
		{
			int now = q.element();
	// deletion of front element of queue if the traversing element is double times or
 //greater than queue
			if (arr[i] >= 2 * now)
			q.remove();
			q.add(arr[i]);
		}
		return q.size();
	}
	
	// Driver code
	public static void main(String args[])
	{
		int [] arr = { 2, 3, 4};
		int n = arr.length;		
		System.out.println(minimumBox(arr, n));
	}
}

Program in Python

# program in python to calculate the number of remaining boxes after putting one inside another.

import collections
def fun (arr, n):
	q = collections.deque([])
	# sorting the array
	arr.sort()
	q.append(arr[0])
	# traversing the array
	for i in range(1, n):
		now = q[0]
		# deletion of front element of queue if the traversing element is double times or #greater than queue
		if(arr[i] >= 2 * now):
			q.popleft()
		# Pushing each element of array
		q.append(arr[i])
	return len(q)
if __name__=='__main__':
	arr = [2, 3, 4]
	n = len(arr)
	print(fun (arr, n))

Program in JavaScript

// program in JavaScript to calculate the number of remaining boxes after putting one inside another.

<script>
function minimumBox(arr, n)
{
	var q = [];
	arr.sort((a,b)=> a-b)
	q.push(arr[0]);
	// array traversal
	for (var i = 1; i < n; i++) {
		var now = q[0];
		// deletion of front element of queue if the traversing element is double times or //greater than queue
		if (arr[i] >= 2 * now)
			q.pop(0);
		q.push(arr[i]);
	}
	return q.length;
}
var arr = [2, 3, 4];
var n = arr.length;
document.write( minimumBox(arr, n));
</script>

Output:

2

Complexity Analysis: -

Time complexity- Here, we need looping and sorting. For sorting, logn time will be taken and for traversing n time is taken. So, we can find the solution within nlogn time. Time complexity will be O (nlogn).


Related Topics

Find out the area between two concentric circles

You have given two values of the radius of two circles. You have to find out the area between these two circles. Let's take an example - For the above diagram,...

3 minutes read.

Finding the Maximum Element in a Binary Tree

Implementation // Creating a C++ program to excavate the minimum and maximum in a given binary tree. #include <bits/stdc++.h> #include <iostream> using namespace std; // creating a new tree node. class __nod { public: int record; __nod *Lft, *Rt; /*...

4 minutes read.

Linked List Data Structure

Linked list in DS: The linked list is a non-primitive and linear data structure. It is a list of a particular type of data element that is connected to each...

3 minutes read.

Burning binary tree

Burn the Binary tree starting from the target node You have given a binary tree and a target node value. Now you have to burn the tree from target node. You...

4 minutes read.

Comb Sort

Brush sort is a fairly direct orchestrating computation at first arranged by Wlodzimierz Dobosiewicz and Artur Borowy in 1980, later rediscovered (and given the name "Combsort") by Stephen Lacey and...

5 minutes read.

Deletion in B+ Tree

Make a search for the leaf node that containing the key value by taking the value in a key value. If the required key value is found, then it will remove...

6 minutes read.

Reverse a Linked List in groups of given size

Reverse a Linked List in groups of given size This article will explain how to reverse a linked list in groups of given size. Here we have given a linked list...

2 minutes read.

Binary Tree Inorder Traversal

The binary tree is a type of tree in which each and every node has atleast two children except the leaf nodes. We have various operations in the binary tree,...

4 minutes read.

Doubly Linked List

Doubly Linked List Doubly linked list is another kind of Linked list. Doubly linked list contains two pointers for navigation. In this, we can traverse the list in both directions, either...

4 minutes read.

Hashing

Hashing: Hashing is a process in which a large amount of data is mapped to a small table with the help of hashing function. It is a searching technique. Hash table We...

4 minutes read.

Binary Search

Binary Search: When there is a large data structure, the linear search takes a lot of time to search the element. The binary search was developed to overcome the lack...

7 minutes read.

What is the difference between DFS and BFS?

What is BFS? BFS is generally known as the low level traversal. As we already know that it stands for breadth first search and is mainly used in the queue data...

4 minutes read.

Delete N nodes after M nodes of a linked list

Delete N nodes after M nodes of a linked list In this problem, we have given a linked list and two integers M and N. We need to traverse the linked...

3 minutes read.

Bin Packing Problem (How to minimize the number of used Bins)

You have been given an array. The values of the array represent the size of n different items. You have been also given some bins. You have to store the...

3 minutes read.

Detect Loop in Linked List: Data Structure

Detect the Loop in Linked List: In this problem, we will be seeing some technique through which we can detect the loop in linked list. We will discuss each technique...

3 minutes read.

Boruvkas algorithm

This algorithm is used for finding minimum spanning tree from a weighted graph. Like prim’s and kruskal’s algorithm it is also a greedy algorithm. Note:What is the minimum spanning tree?We know...

4 minutes read.

DFS (Depth-first search) Algorithm: Data Structure

What is DFS (Depth-first search)? The depth first search is a graph traversal algorithm. The idea behind this algorithm is backtracking and it is a kind of recursive algorithm. In the...

3 minutes read.

Tim Sort

Tim Sort is a mixture stable arranging calculation that exploits normal examples in information, and uses a mix of an improved Merge sort and Binary Insertion sort alongside an interior...

6 minutes read.

Digital Search Tree in Data Structures

What is a digital search Tree in Data Structures? The Digital search tree is known for its application and diversity in the way it has impacted our world in the field...

3 minutes read.

Big O Notations

What is Big O Notation, and why is it important? "Big O notation is a mathematical notation that depicts a function's limiting behaviour when the input tends towards a certain value...

10 minutes read.