题目:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
题目来源: https://leetcode-cn.com/problems/move-zeroes/
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路分析:
- 首先我们可以把“0",看作是,没有进行赋值的区域。
- 然后将所有非零的值,往前移动,剩下的空间就是没有就行赋值的区域。
- 此时我们再将空出来的区域进行赋上0就行了。
主题代码块:
void moveZeroes(int* nums, int numsSize){
int i,temp=0;
for(i=0;i<numsSize;i++)
{
if(nums[i]!=0)
{
nums[temp]=nums[i];
temp++;
}
}
while(temp<numsSize)
{
nums[temp]=0;
temp++;
}
}
整个完整程序:
#include<stdio.h>
#define N 5
void moveZeroes(int* nums, int numsSize);
int main()
{
int num[N]={0,1,0,3,12};
moveZeroes(num,N);
int i=0;
for(i=0;i<N;i++)
{
printf("%d ",num[i]);
}
return 0;
}
void moveZeroes(int* nums, int numsSize){
int i,temp=0;
for(i=0;i<numsSize;i++)
{
if(nums[i]!=0)
{
nums[temp]=nums[i];
temp++;
}
}
while(temp<numsSize)
{
nums[temp]=0;
temp++;
}
}
/*喜欢的不妨点个赞!👍*/
运行结果: