本文主要是介绍HackerRank Piling Up!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
###题意:多组输入一个n个数字,灭个数字代表正方体的边长,要求每次从这给定的n个正方体中的最左边或者最右边拿一个正方体放置将他们摞起来,要保证下面的正方体时钟比上面的大。
###思路:题目告诉要每次从最左或者最右拿,那么我们用两个指针分别指向列表头和列表尾部,每次从头和尾两个中选取一个大的,若选中的头则头指针+1,若选中的尾尾指针-1,当然每次应该将选出来的与当前已经摞好的最小值比较若大于最小值结束游戏,否则直到选取结束即可,有点像快排的思想但实际不是快排,毕竟不用交换没有涉及到递归,比较简单。(唉!学了一个月python了感觉写代码总是跟写c++代码一样,没有体现出python代码的短小精悍,难受继续努力)
if __name__ in '__main__':t = int(input())for i in range(0, t):n = int(input())lst = list(map(int, input().split()))l = 0r = len(lst) - 1minn = max(lst[0], lst[r])find = 0for i in lst:if lst[l] > lst[r]:if lst[l] > minn:find = 1breakminn = min(minn, lst[l])l += 1else:if lst[r] > minn:find = 1breakminn = min(minn, lst[r])r -= 1if find == 0:print("Yes")elif find == 1:print("No")
###下面和上面思路差不多,但是比较短:
if __name__ in '__main__':t = int(input())for i in range(0, t):n = int(input())lst = list(map(int, input().split()))min_index = lst.index(min(lst))left = lst[ : min_index]right = lst[min_index : ]if left == sorted(left, reverse = True) and right == sorted(right, reverse = False):print("Yes")else:print("No")
这篇关于HackerRank Piling Up!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!