×

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

Given a Binary Tree Return All Root-to-Leaf Paths

Implementation #include <bits/stdc++.h> using namespace std; // A binary tree node generally consists of data, a pointer to the left and right child, and a pointer to the right child.  class __nod { public: int record; __nod* Lft; __nod*...

9 minutes read.

Delete the Middle element of the Linked List in C

Delete the Middle element of the Linked List in C This article has given a singly linked list and will delete the middle element of the given linked list. Example:  The given...

3 minutes read.

Find the fractional (n/kth) node in the linked list

Find the fractional (n/kth) node in the linked list In this problem, we have given a singly linked list and a number k. Here we need to find the (n/k)th element...

2 minutes read.

Identical Linked Lists

Identical Linked Lists In this problem, we have given two linked lists, and we need to check whether the given linked lists are identical or not. Identical means they have the...

4 minutes read.

Flatten Binary Tree to a linked list

Implementation In this section, we will see the implementation of the binary Tree and its conversion into linked lists. let us proceed: - // Writing a C++ program that will convert a...

4 minutes read.

Circular Queue

Circular Queue Circular Queue is special type queue, which follows First in First Out (FIFO) rule and as well as instead of ending queue at the last position, it starts again...

4 minutes read.

Sparse Matrix in Data Structure

Sparse Matrix The sparse matrix is a two-dimensional data object which is made by m rows and n columns, so we can say the number of data values in sparse matrix...

6 minutes read.

FLEX (Fast Lexical Analyzer Generator)

FLEX stands for Fast Lexical Analyzer Generator. Around 1987, Vern Paxson created Flex in C with a great deal of input and inspiration from Van Jacobson. Van Jacobson's approach is...

3 minutes read.

Stack vs Queue: Data Structure

 Difference Between Stack and Queue What is Stack? The LIFO principle applies on insertion and deletion operations of the stack which means last inserted element to the stack will remove first....

3 minutes read.

2-3 Trees and Basic Operations on them

2-3 Trees, like any other AVL trees or B-trees, are just a type of Height Balanced Tree. 2-3 Trees are the B-trees of order 3. Like every other B-tree, the...

4 minutes read.

Does Overloading Work with Inheritance

This is a question that occasionally comes to many programmers. Who are curious to know more now has a complete explanation and a solution through this tutorial! Inheritance: The functions of...

3 minutes read.

Right side view of binary tree

The right view of the binary tree is generally known to be that side viewed from the right direction of the point of view. To be more precise, the right-side...

8 minutes read.

Bookshop management system using file handling in C++

We see different software in every hospitals or library to manage their database. It is very important to store organization’s data. So we use this software. Now we are going...

5 minutes read.

Introduction to 2D-Arrays

Two Dimensional Array Technical Definitions An array of arrays is a common definition for a two-dimensional array. A matrix is another name for a two-dimensional array. A matrix looks like a table...

3 minutes read.

Length of longest palindrome in a linked list using O(1) extra space

Length of longest palindrome in a linked list using O(1) extra space In this problem, we need to find the length of the longest palindrome list that is present in given...

2 minutes read.

Spanning Tree

Spanning Tree: The spanning tree is a subset of the graph. It is a non-cyclic graph. If any node in the spanning tree is truncated, the entire graph fails. There are...

10 minutes read.

Deletion Operation from A B Tree

This article will show the deletion operation through the b tree in C++ programming language. Implementation #include <iostream> using namespace std; class B_TreeNod {   int *kys;   int m;   BTreeNod **C;   int j;   bool leaf;  ...

5 minutes read.

What are the types of Trees in Data Structure

Data structures Data management is called database management. This allows the computer to sort or organize the data for efficient retrieval. A data model is a system used to store, manage,...

6 minutes read.

Tree in Data Structure

Tree A tree is a non-linear data structure by which hierarchical data is displayed. As we know that there are many trees in the forest, similarly the data structure also contains...

3 minutes read.

Given a Binary Tree Check the Zig-Zag Traversal

Implementation // The C++ implementation of the zig-zag traversal method in the O(n) time.  #include <iostream> #include <stack> using namespace std; // creating a binary tree node. struct __nod { int record; struct __nod *Lft, *Rt; }; // creating a...

4 minutes read.