一、题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
二、思路
定义双指针,快慢指针同时指向head,然后同时前进,当快指针遇到0后,再前进一格,然后将快指针的只赋值给慢指针,直到快指针走到底,最后将慢指针后面的所有元素全部设置为0即可。
三、C语言代码
void moveZeroes(int* nums, int numsSize){
int left=0,right=0;
while(right!=numsSize){
while(nums[right] == 0&&right!=numsSize-1) right++;
nums[left++] = nums[right++];
}
memset(&nums[left], 0, (numsSize-left)*sizeof(int));
}