Java如何在打印最长连续相同元素长度的同时输出对应序列
你可以修改原方法的返回值,直接返回最长连续相等序列对应的子数组,子数组的长度就是你要的最长长度,这样就能同时拿到两个信息。具体修改逻辑如下:
- 遍历过程中额外记录两个索引:当前连续序列的起始位置、最长连续序列的起始位置
- 每当更新最长长度时,同步更新最长序列的起始位置
- 遍历结束后根据最长长度和起始位置截取对应的子数组返回
修改后的完整代码如下:
import java.util.Arrays; public class Q3 { public static void main(String[] args) { int[] y = { 6, 7, 4, 4, 4, 4, 7, 1, 3, 3, 4, 1, 4, 3, 4, 2, 9, 1, 8, 2, 7 }; System.out.println(Arrays.toString(y)); int[] longestSeq = longestEqualSequence(y); System.out.println("The longest sequence is length: " + longestSeq.length); System.out.println("The longest sequence is: " + Arrays.toString(longestSeq)); } public static int[] longestEqualSequence(int[] array) { // 空数组边界处理 if (array == null || array.length == 0) { return new int[0]; } int currentSequence = 1; int maxSequence = 1; int currentStart = 0; int maxStart = 0; for (int i = 1; i < array.length; i++) { if (array[i] == array[i - 1]) { currentSequence++; } else { if (currentSequence > maxSequence) { maxSequence = currentSequence; maxStart = currentStart; } currentSequence = 1; currentStart = i; } } // 检查数组末尾的最后一段序列是否为最长 if (currentSequence > maxSequence) { maxSequence = currentSequence; maxStart = currentStart; } // 截取最长子数组返回 return Arrays.copyOfRange(array, maxStart, maxStart + maxSequence); } }
运行后会同时输出最长序列的长度和对应的元素内容,你给出的测试用例运行后会输出长度为4的[4,4,4,4]序列。
内容的提问来源于stack exchange,提问作者user16324183
相关产品推荐
相关产品推荐

