如何打印int[]数组中最长的数字序列(Java)
我是编程新手,需要打印int[]数组中最长的数字序列。 例如,如果我们有:
int[] numbers = {1, 3, 3, 5, 5, 5, 5, 5, 5, 6, 0, 12, 2, 2, 2, 12, 0};
结果应该是:
String result = "5, 5, 5, 5, 5, 5";
我写了一些不好的代码,但可能会给你一些想法
public String findLargestSequence(int[] numbers) {
int bestStart = 0;
int curStart = 0;
int bestLength = 1;
int curLength = 1;
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > numbers[i - 1]) {
curLength++;
if (curLength > bestLength) {
bestStart = curStart;
bestLength = curLength;
}
} else {
curStart = i;
curLength = 1;
}
}
List<String> identical = new ArrayList<>();
for (int i = 0; i < bestLength; i++) {
identical.add(String.valueOf(numbers[bestStart + i]));
}
return Joiner.on(", ").join(identical);
}
更新强>
感谢@phatfingers,我发现了问题:
(numbers[i] > numbers[i - 1])
应该是(numbers[i] == numbers[i - 1])
。
但仍然存在另一个问题。
如果我们有类似于:
int[] numbers = {1, 2, 3, 3, 4, 4};
其结果是:
"3, 3"
我认为在这种情况下,我们可以:
1)比如说,我们没有任何一个最长的序列或
2)显示所有序列,如:
String result = "Founded sequences: " + sequence1 + ", " + sequence2;
3)不要使用上述代码
你会怎么做
# 1 楼答案
您必须在算法中处理4种情况,可以将其分为两部分:
设置当前系列的状态:
设置最高系列的状态:
在实际代码中,这些条件在循环中不受尊重
我评论了两个逻辑错误来说明这个问题:
以下是处理4种情况的建议代码:
# 2 楼答案
这将显示最大发生率,您还可以计算并打印它们