按照题意进行模拟。
首先判断每个 ai<ai+1(0≤i<n−1) 是否成立 然后根据 a ,构造出 b,bi=ai+1−ai
再判断每个 bi<bi+1(0≤i<n−2) 是否成立
如果全部满足则输出 Yes,否则输出 No
时间复杂度:O(n)
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    bool ok = true;
    vector<int> a(n), b(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        if (i > 0) {
            if (a[i] <= a[i - 1]) ok = false;
            b[i - 1] = a[i] - a[i - 1];
            if (i > 1) if (b[i - 2] > b[i - 1]) ok = false;
        }
    }
    if (ok) cout << "Yes\n";
    else cout << "No\n";    
    return 0;
}
Python
n = int(input())
nums = list(map(int, input().split()))
def solve(n, nums):
    res = True
    sub = nums[1] - nums[0]
    for i in range(1, n):
        tmp = nums[i] - nums[i-1]
        if nums[i] <= nums[i - 1]:
            res = False
            break
    for i in range(2, n):
        if nums[i] <= nums[i-1] * 2 - nums[i-2]:
            res = False
            break
     
    return res
res = solve(n, nums)
if res == True:
    print("Yes")
else:
    print("No")
Java
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if(n==1){System.out.println("No");return;}
        int[] nums=new int[n];
        for (int i=0;i<n;i++){
            nums[i]=in.nextInt();
        }
        int cur=0;
        for (int i=1;i<n;i++){
            if(nums[i]<=nums[i-1]||nums[i]-nums[i-1]<=cur){
                System.out.println("No");return;
            }else{
                cur=nums[i]-nums[i-1];
            }
        }
        System.out.println("Yes");return;
    }
}
        小美有一个长度为 n 的数组 a ,他需要你判断这个数组是不是合法数组。
一个合法数组需要满足:
第一行,一个整数 n(1≤n≤105) ,表示数组的长度。 第二行,n 个整数表示数组 a ,第 i 个整数为 ai(1≤ai≤109)
如果是合法数组,输出 "Yes" ,否则输出 "No"
输入
5
1 3 7 13 21
输出
Yes
            In following contests: