我有一个数组,我想计算由等号做出的最长子序列的长度: 示例:5 1 1 9 9 9 4 4 6 6 4 4 4 - >最长子序列的长度为3(9 9 9)。 这是我到目前为止所得到的,但它不起作用。
int lung=0, lungmax=0;
int indice = 0;
int [] values = new int [30];
for(int k=0; k<30; k++)
{
if (values[k]==values[k+1])
{
lung++;
if (lung>lungmax)
{
lungmax=lung;
indice=values[k];
}
}
else lung=0;
}
lungmax = lungmax++;
System.out.println("the length of the longest subsequence is: "+lungmax);
答案 0 :(得分:5)
您的代码有两个错误:
for(int k=0; k<30; k++) {
if (values[k]==values[k+1]) {
此循环将执行,直到k
达到值30
。因此,k
的上次使用值为29
。如果您在if
语句中使用该值,则可以通过调用values[k+1]
(== values[30]
)来超过该数组范围。
将该循环更改为:
for(int k = 0; k < values.length - 1; k++) {
第二个问题是这一行:
lungmax = lungmax++;
这与:
相同int temp = lungmax;
lungmax = lungmax + 1;
lungmax = temp;
正如您所看到的,您已经无视&#34;增量。将该行更改为:
lungmax++;
答案 1 :(得分:4)
试试这个。通过应用我的方法,ArrayIndexOutOfBoundsException已被删除。
public static void main(String args[]) {
int lung = 1, lungmax = 0;
int indice = 0;
int[] values = {1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 6};
for (int k = 1; k < values.length; k++) {
if (values[k - 1] == values[k]) {
lung++;
if (lung > lungmax) {
lungmax = lung;
indice = values[k];
}
} else {
lung = 1;
}
}
System.out.println("the length of the longest subsequence is: " + indice + "/" + lungmax);
}
答案 2 :(得分:1)
或者简单地说 进行以下更改
int lungmax=1;
并替换
lungmax=lung
与
lungmax++;
并删除上一个lungmax=lungmax++
加上汤姆建议:k<30-1