分析:
思维还是不够发散,太容易一种方法走到死了,一直在模拟一直WA,看完题解发现一个数组的整段所有数组共同移动的距离最多只能是2,那么a[0]到a[n - 1]就是之间应该有多少个数,然后本来需要n个连续的数,只需要看a[n - 1] - a[0]的数字个数比n多了多少个,一旦大于等于3,那么也就意味着不可能移动使数组变为连续的一段数字,因为两个数之间最大距离就是2,互相向中间移动一个,一旦a[n - 1] - a[0] + 1这么多的数字比n多3或者3以上,也就表示所有数字之间至少存在3的距离需要移动,但是最多只能移动2距离,所以不行。
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T --) {
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i ++) cin >> a[i];
if(a[n - 1] - a[0] - n < 2) cout << "YES\n";
else cout << "NO\n";
}
}