科大讯飞笔试8.28编程题
第一题 判断成绩等级送分题
第二题 最长重复数字区间 可以交换一次
第三题 测试用例过了 但是A了0;
这是第二题的代码
public class Main2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int num[] = new int[n];
for (int i = 0; i < n; i++) {
num[i] = in.nextInt();
}
int left = 0, right = 1;
int max = 1;
ArrayList<Integer> maxleft = new ArrayList<>();
while (right < n) {
while (right < n && num[left] == num[right]) {
right++;
}
if (max <= right - left) {
if (max < right - left) {
max = right - left;
maxleft.clear();
maxleft.add(left);
} else {
maxleft.add(left);
}
}
left = right;
right++;
}
for (Integer i : maxleft) {
int maxRight = i + max - 1;
if (i > 1 && num[i - 2] == num[i]) {
max++;
break;
} else if (maxRight < n - 2 && num[maxRight + 2] == num[maxRight]) {
max++;
break;
}
}
System.out.println(max);
}
}
全部评论
(1) 回帖