我把我的代码贴上来了,不知道怎么做的地方写了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; // 左端点初始为 0 maxrange[1] = 1; // 右端点初始为 1 int 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)); }