题目:将数组中的0都放置在数组末尾,其他元素保持顺序不变。要求时间复杂度为 ,空间复杂度为常数。
思路:我们可以用双指针进行遍历,一个指针指向0,一个指针指向非0元素。并将这两个指针对应的元素进行交换,接着在进行遍历。
接下来我们用C++进行编程:
void ZeroToEnd(int* numbers, int length)
{
if(numbers == nullptr || length <=0)
return;
for(int i = 0; i < length ; i++)
{
if(numbers[i] == 0)
{
int j = i;
while(numbers[j] == 0)
j++;
if(numbers[j] != 0)
{
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
i = j;
}
}
}
}