当我得到像[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]。
答案 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++)
如果输入数组的最后一个唯一编号重复多次,可以使它稍快一些。