目录
移动零
给定一个数组 nums
,一个关系编写函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
测试单元
直接用题目中给出的测试用例
int main()
{
int nums1[] = { 0, 1, 0, 3, 12 };
int nums2[] = { 0 };
moveZeroes(nums1, 5);
moveZeroes(nums2, 1);
for (int i = 0; i < 5; i++)
{
printf("%d ", nums1[i]);
}
printf("\n");
for (int i = 0; i < 1; i++)
{
printf("%d ", nums2[i]);
}
printf("\n");
system("pause");
return 0;
}
题目分析
题目要求将数组中的零移动到数组末尾,既可以转化为将非零数放在数组开头,然后按照数组原有个数在在后补几个零即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include "test.h"
void moveZeroes(int nums[], int numsSize)
{
if (numsSize == 0 || numsSize == 1)
return;
int j = 0;
for (int i = 0; i < numsSize; i++)
{
if (nums[i])
{
nums[j++] = nums[i];
}
}
for (int i = j; i < numsSize; i++)
{
nums[i] = 0;
}
}
int main()
{
int nums1[] = { 0, 1, 0, 3, 12 };
int nums2[] = { 0 };
moveZeroes(nums1, 5);
moveZeroes(nums2, 1);
for (int i = 0; i < 5; i++)
{
printf("%d ", nums1[i]);
}
printf("\n");
for (int i = 0; i < 1; i++)
{
printf("%d ", nums2[i]);
}
printf("\n");
system("pause");
return 0;
}