我是编程的初学者,我需要从int []数组中打印最长的数字序列。 例如,如果我们有:如何从int []数组(Java)中打印最长的数字序列
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)说,我们不要” t具有任何一个最长的序列OR
2)显示所有序列,如:
String result = "Founded sequences: " + sequence1 + ", " + sequence2;
3)对上面的代码不做任何事情。
你会怎么做?
对于初学者来说,你的'(数字检查[i]数字[i - 1])'应该是'(数字[i] ==数字[i - 1])''。 – phatfingers
我没有代码,但这是我的理论。首先,将数组从最低到最高排序。然后,检查每个数字的连续出现次数。然后你可以找出那个序列。 –
除了@phatfingers指出的外,你的代码看起来很漂亮,正确。黑马,它是否与建议的更正一起工作?如果不是,以什么方式不? –