LeetCode-283-移动零(完整代码C语言)
题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例及提示
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surface-area-of-3d-shapes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码(C语言)
#include<stdio.h>
int moveZeroes(int* nums, int numsSize){
int label=0;
for(int j=1;j<numsSize;j++){
if(nums[label]==0&&nums[j]!=0){
nums[label]=nums[j];
nums[j]=0;
label++;
}
if(nums[label]!=0){
label++;
}
}
}
int main(){
int nums[]={0,0,1,0,3,1,2};
int numsSize=sizeof(nums)/sizeof(nums[0]);
moveZeroes(nums,numsSize);
for(int i=0;i<numsSize;i++){
printf("%d ",nums[i]);
}
}
本题用双指针简单快捷的就能解决。即两个指针分别指向尚未排序处理的第一个元素和将要处理的元素。
解读
按照这个双指针的方案解决主要要考虑清楚数组第一个元素该怎么处理。