原题描述
原题地址: https://leetcode.com/problems/move-zeroes/
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:
1. You must do this in-place without making a copy of the array.
2. Minimize the total number of operations.
我的翻译
给一个数组的大小nums,写一个函数它的功能为:把该数组中的0都移动到该数组末端同时保持其余非0数字的相对顺序
例如,给一个数组nums = [0, 1, 0, 3, 12],在经过你的函数后,nums数组应当变成了nums =[1, 3, 12, 0, 0]
提示:
1. 应当就在该数组中完成操作且不应当创建一个该数组的拷贝
2. 使用最少的移动步数
算法分析
- 也即把一个数组中的0全部移动到末尾,其余的非零数字按顺序往前推
- 则把非零数依次前移,最后再在数组尾补上相应个数的0则完成排序
实现代码
void moveZeroes(int* nums, int numsSize) {
int i;
int feiling = 0;
for (i = 0; i<numsSize; i++)
{
if (nums[i] == 0)
{
continue;//为0则跳过
}
else
{
nums[feiling] = nums[i];//非0则放到数组前面
feiling = feiling + 1;//非零元素加1
}
}
for (i = feiling; i<numsSize; i++)
{
nums[i] = 0;//在数组中的所有非零元素后面补0
}
}