【蓝桥杯每日一练:我的世界】

问题描述

小T在我的世界中建立了N根柱子,其中第i根柱子由H i 个方块组成。

一次操作的定义是:去掉某根柱子的一个方块。

小T对一根柱子最多进行一次操作,问能否找到一种方法,使得N NN根柱子从左到右含有的方块数量非递减。

例如本来有5根柱子,高度分别是1、2、1、1、3
可以选择对第二根柱子进行一次操作(减少第二根柱子中的一个方块)
之后所有柱子所包含的方块数为1、1、1、1、3,非递减。

输入格式

输入包括2行:
第一行是1个整数N,代表我的世界中共有N根柱子。
第二行是N个空格隔开的正整数H i,代表从左到右每根柱子所包含的方块数。
数据范围:

  • 1 ≤ N ≤ 10^5
  • 1 ≤ H i ≤ 10^9

输出格式

能否找到一种方法,在对一根柱子顶多操作一次的前提下,使得这N根柱子所包含的方块数量非递减。
如果可以,输出Yes,否则输出No

输入样例

4
1 3 2 1

输出样例

No

【提示】

降低计算时间就是减少遍历复杂度,尽量只遍历一次。

代码

N=int(input())
A=list(map(int,input().split()))
x=A[0]-1
y=0
for i in range(1,N):
    if A[i]>x:
        x=A[i]-1
    elif A[i]==x:
        x=x
    else:
        y=1
        print('No')
        break
if y!=1:
    print('Yes')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjf时空方程

感谢各位的支持,我一定会努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值