我是編程的初學者,我需要從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指出的外,你的代碼看起來很漂亮,正確。黑馬,它是否與建議的更正一起工作?如果不是,以什麼方式不? –