1,初级解法:
从后向前遍历,遇到0,便将后面的往前挪,然后将空位置0。
void moveZeroes(int* nums, int numsSize){
int count = 0;
for(int i=numsSize-1; i>=0; i--)
{
if(nums[i] == 0)
{
int j;
for(j=i+1; j<numsSize-count; j++)
{
nums[j-1]=nums[j];
}
nums[numsSize-count-1] = 0;
count++;
}
}
}
2,官方题解:
void swap(int *a, int *b) {
int t = *a;
*a = *b, *b = t;
}
void moveZeroes(int *nums, int numsSize) {
int left = 0, right = 0;
while (right < numsSize) {
if (nums[right]) {
swap(nums + left, nums + right);
left++;
}
right++;
}
}
3,评论区高赞解法:
因为我们知道末尾是0,所以不用进行交换。
void moveZeroes(int* nums, int numsSize) {
int i = 0,j = 0;
for(i = 0 ; i < numsSize; i++)
{
if(nums[i] != 0)
{
nums[j++] = nums[i];
}
}
while(j < numsSize)
{
nums[j++] = 0;
}
}