283. Move Zeroes(移动零)

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

题目描述

给定一个数组 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;
        }
    }
}

提交结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值