题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
问题分析
从后向前,记录第一个非0的数字的下标,然后从后向前寻找数字0,如果遇到数字0就将数字0到倒数第一个非零数字之间的所有元素向前移,然后将刚才的元素置为0,同时更新第一个非0的数字的下标为上一次数值减去1
代码
void moveZeroes(int* nums, int numsSize) {
int index_end = numsSize-1;
for(int i=numsSize-1; i>=0; i--){
if(nums[i]!=0){
index_end = i;
break;
}
}
for(int i=index_end-1; i>=0; i--){
if(nums[i]==0){
for(int j=i+1; j<=index_end;j++){
nums[j-1] = nums[j];
}
nums[index_end] = 0;
index_end = index_end-1;
}
}
}
提交结果截图

该篇文章介绍了一种解决编程问题的方法,即如何在不复制数组的情况下,将给定数组`nums`中所有的0移动到数组末尾,同时保持非零元素的相对顺序。通过两个遍历来实现这一目标,首先找到第一个非零元素的下标,然后从后向前替换0并更新非零元素的位置。
264

被折叠的 条评论
为什么被折叠?



