Piling Up! – Python Hackerrank Solution
There is a horizontal row of n cubes. The length of each cube is given. You need to create a new vertical pile of cubes. The new pile should follow these directions: if cube[i] is on top of cube[j] then sideLength[j]>=sideLength[i].
When stacking the cubes, you can only pick up either the leftmost or the rightmost cube each time. Print Yes
if it is possible to stack the cubes. Otherwise, print No
.
Example
blocks=[1,2,3,8,7]
Result: No
After choosing the rightmost element, 7, choose the leftmost element,1 . After than, the choices are 2 and 8. These are both larger than the top block of size 1.
blocks=[1,2,3,7,8]
Result: Yes
Choose blocks from right to left in order to successfully stack the blocks.
Input Format
The first line contains a single integer T, the number of test cases.
For each test case, there are 2 lines.
The first line of each test case contains n, the number of cubes.
The second line contains n space separated integers, denoting the sideLengths of each cube in that order.
Constraints
1<=T<=5
1<=n<=10^5
1<=sideLength<2^31
Output Format
For each test case, output a single line containing either Yes
or No
.
Sample Input
STDIN Function ----- -------- 2 T = 2 6 blocks[] size n = 6 4 3 2 1 3 4 blocks = [4, 3, 2, 1, 3, 4] 3 blocks[] size n = 3 1 3 2 blocks = [1, 3, 2]
Sample Output
Yes No
Explanation
In the first test case, pick in this order: left -4 , right -4 , left – 3, right – 3, left – 2, right -1 .
In the second test case, no order gives an appropriate arrangement of vertical cubes. 3 will always come after either 1 or 2.
Code:
# Piling Up! - Python Hackerrank Solution codesagar.in from collections import deque N = int(input()) for _ in range(N): flag = True input() d = deque(map(int, input().strip().split())) if(d[0] >= d[-1]): max = d.popleft() else: max = d.pop() while d: if(len(d)==1): if(d[0] <= max): break else: flag = False break else: if(d[0]<=max and d[-1]<=max): if(d[0]>=d[-1]): max = d.popleft() else: max = d.pop() elif(d[0]<=max): max = d.popleft() elif(d[-1]<=max): max = d.pop() else: flag = False break if flag: print("Yes") else: print("No") #Piling Up! - Python Hackerrank Solution codesagar.in
Disclaimer: This problem is originally created and published by HackerRank, we only provide solutions to this problem. Hence, doesn’t guarantee the truthfulness of the problem. This is only for information purposes.