如何将数组与多个数字连接起来

时间:2016-09-20 11:32:05

标签: java arrays integer int concatenation

当我得到像[1,1,2,2,3,3,4]那样的数组时,我需要打印[1,2,3,4]。

其他例子:

input = [1,1,1,2]输出应为= [1,2]

input = [1,1,1,1]输出应为= [1]

 int count=1;
 //This for counts only the different numbers of the array input.
 for(int i=0; i<array.length-1;i++){
            if(array[i+1]!=array[i]){
                count++;

            }
        }
        //New array only for the needed numbers.
        Integer [] res = new Integer[count];
        res[0] = array[0];
        for(int i = 1;i<count;i++){
            if(array[i]!=array[i+1]){
                res[i]=array[i+1];
            }
        }

输入[1,1,2,2,3,3,4]我得到[1,2,null,3]。

应该是[1,2,3,4]。

1 个答案:

答案 0 :(得分:1)

一个问题是即使在array[i]==array[i+1]时也会增加循环计数器,这会导致输出数组的值为null

另一个问题是你不会在第二个循环中迭代输入数组的所有元素。

如果使用两个索引,两个问题都可以解决,一个用于输入数组(循环的变量),另一个用于输出数组中的当前位置:

int count=1;
for(int i=0; i<array.length-1;i++){
    if(array[i+1]!=array[i]){
        count++;
    }
}
Integer [] res = new Integer[count];
res[0] = array[0];
int resIndex = 1;
for(int i = 1; i < array.length - 1; i++){
    if(array[i] != array[i+1]) {
        res[resIndex] = array[i+1];
        resIndex++;
    }
}

编辑:

正如法比安建议的那样,将第二个循环改为

for(int i = 1 ; i < array.length - 1 && resIndex < count; i++)
如果输入数组的最后一个唯一编号重复多次,

可以使它稍快一些。