我把我的代码贴上来了,不知道怎么做的地方写了TODO,希望有大佬可以指点一下,谢谢!祝大家秋招都顺利!引流一下:百度 阿里 腾讯 字节跳动 小红书public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = in.nextInt();}// 最小的两个数之和大于最大的数Deque maxNum = new LinkedList<>(); // 存区间最大值Deque; minNum = new LinkedList<>(); // 存区间最小值int left = 0; // 初始化左端点int[] maxrange = new int[2]; // 存最大区间的左右两个端点maxrange[0] = 0; // 左端点初始为 0maxrange[1] = 1; // 右端点初始为 1int maxlen = 2; // 最大区间的长度for (int right = 0; right < n; right++) {while (!maxNum.isEmpty() && nums[maxNum.getFirst()] < nums[right]) {maxNum.removeFirst();}maxNum.addLast(right);while (!minNum.isEmpty() && nums[right] < nums[minNum.getFirst()]) {minNum.removeFirst();}minNum.addLast(right);if (right - left > 1) { // 如果区间长度大于 2,判断最小值加第二小值是否大于最大值// 如果最小值加第二小值大于最大值, flag = true;// 反之,flag = false;// TODO: 怎么存第二小值从而判断 flag?boolean flag = true;if (flag) { // 如果满足三角形要求,判断区间长度是否变长if (right - left + 1 > maxlen) {maxlen = right - left + 1;maxrange[0] = left;maxrange[1] = right;}} else { // TODO: 如果不满足三角形要求,怎么做?while (right - left > 1) {left++;while (!maxNum.isEmpty() && maxNum.getFirst() < left) maxNum.removeFirst();while (!minNum.isEmpty() && minNum.getFirst() < left) minNum.removeFirst();}}}}System.out.println(maxrange[0] + 1 + " " + (maxrange[1] + 1));}