283. Move Zeroes
Difficulty: Easy
Given an array nums, write a function to move all 0’s to the end of it
while maintaining the relative order of the non-zero elements.For example, given nums = [0, 1, 0, 3, 12], after calling your
function, nums should be [1, 3, 12, 0, 0].Note: You must do this in-place without making a copy of the array.
Minimize the total number of operations.
void moveZeroes(int* nums, int numsSize) {
int i,j;
int s=0;
for(i=0;i<numsSize;i++)
{
if(*(nums+i) == 0) //用s记录从左到右遇到的0
s++;
else
{
if(s>0)
{
*(nums+i-s)=*(nums+i);
*(nums+i)=0;
}
}
}
}
关键点:数组非零元素的相对位置不能改变,因此用s记录连续0出现的次数,当出现非零元素时,与第一个0交换位置。