


You are given an array 'ARR' of N integers. Each integer represents the height of a balloon. So, there are N balloons lined up.
Your aim is to destroy all these balloons. Now, a balloon can only be destroyed if the player shoots its head. So, to do the needful, he/ she shoots an arrow from the left to the right side of the platform, from an arbitrary height he/she chooses. The arrow moves from left to right, at a chosen height ARR[i] until it finds a balloon. The moment when an arrow touches a balloon, the balloon gets destroyed and disappears and the arrow continues its way from left to right at a height decreased by 1. Therefore, if the arrow was moving at height ARR[i], after destroying the balloon it travels at height ARR[i]-1. The player wins this game if he destroys all the balloons in minimum arrows.
You have to return the minimum arrows required to complete the task.
The first line of input contains an integer N representing the size of the array.
The second line of input contains N space-separated integers representing the height of the balloons.
Output Format:
Return a single integer i.e. the count of the minimum number of arrows required to complete the task.
Note:
You are not required to print the output, it has already been taken care of. Just implement the function.
1 <= N <= 10^5
1 <= ARR[i] <= 10^9
Time Limit: 1sec
5
2 1 5 4 3
2
We need to shoot the arrow at height 5 - which destroys balloons at the height [5, 4, 3], and shoots an arrow at height 2 - which destroys [2, 1]. Therefore we require a minimum of 2 arrows.
3
3 2 1
1
We need to shoot the arrow at height 3 - which destroys balloons at the height [3,2,1]. Therefore we need to shoot only 1 arrow.
We would like to shoot a balloon with the maximum height and then whatever other balloons it can hit will be beneficial to us so think of a way to store the heights of the balloons such that for i’th balloon you should be able to know do you have to fire a new arrow or not.
We can see here that balloons need to be destroyed in a minimum number of arrows so we need to reuse the arrows, also it’s clear that we need a new arrow for every balloon which is not getting destroyed by any previous arrow.
So we can solve this problem greedily by adding a new arrow for every balloon which is not getting destroyed by existing arrows.
O(N), where N is the number of balloons.
As we are visiting every balloon only once and we are also searching and accessing Hashmap N times whereas hashmap has constant time complexity on average. So overall time complexity is O(N).
O(N), where N is the number of balloons.
As we are storing the heights of balloons in the hashmap and its size can at max grow up to O(N).