题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
问题分析
从后向前,记录第一个非0的数字的下标,然后从后向前寻找数字0,如果遇到数字0就将数字0到倒数第一个非零数字之间的所有元素向前移,然后将刚才的元素置为0,同时更新第一个非0的数字的下标为上一次数值减去1
代码
void moveZeroes(int* nums, int numsSize) {int index_end = numsSize-1;for(int i=numsSize-1; i>=0; i--){if(nums[i]!=0){index_end = i;break;}}for(int i=index_end-1; i>=0; i--){if(nums[i]==0){for(int j=i+1; j<=index_end;j++){nums[j-1] = nums[j];}nums[index_end] = 0;index_end = index_end-1;}}
}