给定一个整数数组,以相同的顺序返回一个数组,并删除所有0。
示例输入#1
remove({1,2,3,4,5,0,1,2,0,0,2})
示例输出#1
{1,2,3,4,5,1,2,2}
示例输入#2
remove({0,0,1,2})
示例输出#2
{1,2}
示例输入#3
remove({0,0,0,0})
示例输出#3
{}
MyApproach
我首先计算了那里有多少个零然后我创建了一个新数组,并且只添加了那些不为零的元素。
但我没有得到正确的输出。
任何人都可以指导我做错了吗?
以下是我上述程序的代码:
public int[] remove(int[] arr)
{
int count=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]==0)
{
count++;
}
}
int p[]=new int[arr.length-count];
for(int m=0;m<p.length;)
{
if(arr[m]==0)
{
m++;
}
else
{
p[m]=arr[m];
m++;
}
}
return p;
}
Parameters Actual Output Expected Output
'{0,1,2,3,0,1}' {0,1,2,3} {1,2,3,1}
答案 0 :(得分:3)
您需要两个计数器,一个用于复制的位置,另一个用于复制到的位置。
for (int n = 0, m = 0; m < p.length; m++)
if (arr[m] != 0)
p[n++] = arr[m];
或者你可以做
int n = 0;
for (int x : arr)
if (x != 0)
p[n++] = x;
在Java 8中,你可以做到
public static int[] removeZero(int[] ints) {
return IntStream.of(ints)
.filter(i -> i != 0)
.toArray();
}
答案 1 :(得分:0)
尝试使用它来删除数组中的零:
public int[] remove(int[] array)
{
int j = 0;
for( int i=0; i<array.length; i++ )
{
if (array[i] != 0)
array[j++] = array[i];
}
int [] newArray = new int[j];
System.arraycopy( array, 0, newArray, 0, j );
return newArray;
}