Get the best out of our app
GFG App
Open App
Browser
Continue

# Number of elements that can be seen from right side

Given an array of integers, consider the elements as the height of the building, find the number of buildings that can be seen from the right side.

Examples:

```Input : height[] = {2, 6, 2, 4, 0, 1}
Output : 3
we can see only 3 building i.e with height 1, 4 and 6.

Input : height[] = {4, 8, 2, 0, 0, 5}
Output : 2```

This problem seems to be finding longest increasing sub sequence from right but actually it is not.We have to just increase the count if we encounter any building with greater height found so far.

Below is the implementation of the above approach.

## C++

 `// CPP program to find number of elements` `// that can be seen from right side.` `#include ` `using` `namespace` `std;`   `int` `numberOfElements(``int` `height[], ``int` `n)` `{` `    ``int` `max_so_far = 0;` `    ``int` `count = 0;`   `    ``for` `(``int` `i = n - 1; i >= 0; i--) {` `        ``if` `(height[i] > max_so_far) {` `            ``max_so_far = height[i];` `            ``count++;` `        ``}` `    ``}` `    ``return` `count;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `n = 6;` `    ``int` `height[] = { 4, 8, 2, 0, 0, 5 };` `    ``cout << numberOfElements(height, n);` `    ``return` `0;` `}`

## Java

 `// Java program to find number of elements` `// that can be seen from right side.` `import` `java.util.*;` `class` `Solution` `{` ` `  `static` `int` `numberOfElements(``int` `height[], ``int` `n)` `{` `    ``int` `max_so_far = ``0``;` `    ``int` `coun = ``0``;` ` `  `    ``for` `(``int` `i = n - ``1``; i >= ``0``; i--) {` `        ``if` `(height[i] > max_so_far) {` `            ``max_so_far = height[i];` `            ``coun++;` `        ``}` `    ``}` `    ``return` `coun;` `}`   `// Driver code ` `public` `static` `void` `main(String args[])` `{` `    ``int` `n = ``6``;` `    ``int` `height[] = { ``4``, ``8``, ``2``, ``0``, ``0``, ``5` `};` `    ``System.out.println( numberOfElements(height, n));` `  `  `}`   `}` `//contributed by Arnab Kundu`

## Python3

 `# Python3 program to find ` `# number of elements` `# that can be seen from right side`   `def` `numberOfElements(height, n):` `    `  `    ``max_so_far ``=` `0` `    ``coun ``=` `0` `    `  `    ``for` `i ``in` `range``(n``-``1``,``-``1``,``-``1``):` `        ``if` `height[i] > max_so_far:` `            ``max_so_far ``=` `height[i]` `            ``coun ``=` `coun ``+` `1` `    ``return` `coun`   `#Driver code` `if` `__name__``=``=``'__main__'``:` `    ``n ``=` `6` `    ``height ``=` `[``4``, ``8``, ``2``, ``0``, ``0``, ``5``]` `    ``print``(numberOfElements(height, n))` `    `  `# This code is contributed by ` `# Shashank_Sharma     `

## C#

 `// C# program to find number of elements` `// that can be seen from right side.` `using` `System;`   `class` `GFG` `{` `public` `static` `int` `numberOfElements(``int` `[]height,` `                                   ``int` `n)` `{` `    ``int` `max_so_far = 0;` `    ``int` `coun = 0;`   `    ``for` `(``int` `i = n - 1; i >= 0; i--)` `    ``{` `        ``if` `(height[i] > max_so_far)` `        ``{` `            ``max_so_far = height[i];` `            ``coun++;` `        ``}` `    ``}` `    ``return` `coun;` `}`   `// Driver code ` `public` `static` `void` `Main()` `{` `    ``int` `n = 6;` `    ``int` `[]height = { 4, 8, 2, 0, 0, 5 };` `    ``Console.WriteLine(numberOfElements(height, n));` `}` `}`   `// This code is contributed by Soumik `

## PHP

 `= 0; ``\$i``--) ` `    ``{` `        ``if` `(``\$height``[``\$i``] > ``\$max_so_far``) ` `        ``{` `            ``\$max_so_far` `= ``\$height``[``\$i``];` `            ``\$coun``++;` `        ``}` `    ``}` `    ``return` `\$coun``;` `}`   `// Driver code` `\$n` `= 6;` `\$height` `= ``array``(4, 8, 2, 0, 0, 5 );` `echo` `numberOfElements(``\$height``, ``\$n``);`   `// This code is contributed` `// by Akanksha Rai`

## Javascript

 ``

Output

`2`

Time Complexity: O(n)
Auxiliary Space: O(1)

Approach:

We can traverse the array from left to right and push the elements onto the stack. For each new element, we can pop all the elements from the stack that are smaller than the current element, as they cannot be seen from the right side. The number of buildings that can be seen from the right side will be the size of the stack after all the elements have been processed.

• Create an empty stack and initialize the count of visible buildings to 0.
• Traverse the array of heights from left to right, one element at a time.
• For each element, check if it is greater than or equal to the top element of the stack. If it is, then pop all the elements from the stack that are smaller than the current element, as they cannot be seen from the right side.
• After all the smaller elements have been popped from the stack, push the current element onto the stack.
• The number of buildings that can be seen from the right side is the size of the stack after all the elements have been processed.
• Return the count of visible buildings.

Below is the implementation of the above approach:

## C++

 `#include ` `using` `namespace` `std;`   `int` `numberOfElements(``int` `height[], ``int` `n)` `{` `    ``stack<``int``> st;` `    ``int` `count = 0;` `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``while` `(!st.empty() && height[i] >= st.top()) {` `            ``st.pop();` `        ``}` `        ``st.push(height[i]);` `    ``}` `    ``return` `st.size();` `}`   `// Driver code` `int` `main()` `{` `    ``int` `n = 6;` `    ``int` `height[] = { 4, 8, 2, 0, 0, 5 };` `    ``cout << numberOfElements(height, n);` `    ``return` `0;` `}`

Output

`2`

Time Complexity: O(n), where n is the number of elements in the input array.

Auxiliary Space: O(n), as the worst-case scenario is when all the elements are in increasing order, and the stack will have all the n elements.

My Personal Notes arrow_drop_up
Similar Reads
Related Tutorials