问题描述
有𝑁个正方形从左到右排成一行。第𝑖个正方形的高度是𝐻𝑖。 对于每个正方形,你可以执行以下操作之一:
• 将正方形的高度减少1。
• 什么也不做。
确定是否可以通过执行这些操作使得正方形的高度从左到右非递减。
限制条件
• 输入中的所有值均为整数。
• 1≤𝑁≤1e5
• 1≤𝐻𝑖≤1e9
输入 输入以以下格式从标准输入中给出: N H1 H2 H3 …… Hn
输出 如果可以通过执行操作使得正方形的高度从左到右非递减,则输出Yes;否则输出No。
样例
输入 5 1 2 1 1 3 输出 Yes
输入 4 1 3 2 1 输出 No
思路:它通过遍历每个正方形的高度,并维护一个当前遇到的最大高度max。对于每个新的高度H,如果H大于max,则更新max;如果H小于max-1,则说明无法通过减少1的操作使得正方形的高度从左到右非递减,因此输出No并结束程序。如果遍历完所有正方形都没有出现这种情况,则输出Yes。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
ios::sync_with_stdio(false);//关闭同步
cin.tie(nullptr); //取消cin 和 cout的绑定
ll n;
cin>>n;
vector<int> arr(n);
ll max;
cin>>arr[0];
max=arr[0];
for(int i=1;i<n;i++)
{
cin >> arr[i];
if(arr[i] > max)
max=arr[i];
else if(arr[i] < max - 1)
{
cout<< "No"<< endl;
return 0;
}
}
cout<< "Yes" << endl;
return 0;
}