科大讯飞笔试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) 回帖