#include <iostream>
#include <vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int m = n - 1;
vector<int>nums(m);
for (int i = 0; i < m; i++) {
cin >> nums[i];
}
//把数组分割
vector<vector<int>>ans;
vector<int>k;
k.push_back(nums[0]);
for (int i = 1; i < m; i++) {
if (nums[i] - k.back() != 1) {
ans.push_back(k);
k.clear();
k.push_back(nums[i]);
} else {
k.push_back(nums[i]);
}
}
if (!k.empty()) {
ans.push_back(k);
}
//看前一段的末尾和这一段的头是不是相差2
int pre = ans[0].back();
int len = ans[0].size();
int maxlen = len;
for (int i = 1; i < ans.size(); i++) {
if (ans[i][0] - pre == 2) {
len += ans[i].size() + 1;
} else {
len = ans[i].size();
}
pre=ans[i].back();
maxlen = max(maxlen, len);
}
cout << maxlen << endl;
}
return 0;
}
有没有好心人看看那里错了
#include <vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int m = n - 1;
vector<int>nums(m);
for (int i = 0; i < m; i++) {
cin >> nums[i];
}
//把数组分割
vector<vector<int>>ans;
vector<int>k;
k.push_back(nums[0]);
for (int i = 1; i < m; i++) {
if (nums[i] - k.back() != 1) {
ans.push_back(k);
k.clear();
k.push_back(nums[i]);
} else {
k.push_back(nums[i]);
}
}
if (!k.empty()) {
ans.push_back(k);
}
//看前一段的末尾和这一段的头是不是相差2
int pre = ans[0].back();
int len = ans[0].size();
int maxlen = len;
for (int i = 1; i < ans.size(); i++) {
if (ans[i][0] - pre == 2) {
len += ans[i].size() + 1;
} else {
len = ans[i].size();
}
pre=ans[i].back();
maxlen = max(maxlen, len);
}
cout << maxlen << endl;
}
return 0;
}
有没有好心人看看那里错了
全部评论
相关推荐
点赞 评论 收藏
分享

查看28道真题和解析