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 = 0
        r = len(lst) - 1
        minn = max(lst[0], lst[r])
        find = 0
        for i in lst:
            if lst[l] > lst[r]:
                if lst[l] > minn:
                    find = 1
                    break
                minn = min(minn, lst[l])
                l += 1
            else:
                if lst[r] > minn:
                    find = 1
                    break
                minn = min(minn, lst[r])
                r -= 1
        if 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")

猜你喜欢

转载自blog.csdn.net/small__snail__5/article/details/80769157