美文网首页
leetcode 初级之数组篇 08

leetcode 初级之数组篇 08

作者: ngugg | 来源:发表于2018-09-17 22:15 被阅读3次

    283. Move Zeroes

    移动零
    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:

    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。
    // 解法一
    //思路很简单,使用使用两个索引lastIndex和curIndex,curIndex从后向前遍历直到其元素为0,然后根据lastIndex与curIndex之间的差值,将元素前移。

    //void moveZeroes(int* nums, int numsSize) {
    //    int lastIndex = numsSize - 1; // 最后一个
    //    int curIndex = numsSize - 1; // 当前判断的元素
    //    int count = 0;
    //    while (curIndex >= 0) {
    //        if (nums[curIndex] == 0) {
    //            // 需要移动的元素个数
    //            count = lastIndex - curIndex;
    //            for (int i = 0; i < count; i++) {
    //                nums[curIndex + i] =  nums[curIndex + i + 1];
    //            }
    //            nums[lastIndex] = 0;
    //            lastIndex--;
    //        }
    //        curIndex--;
    //    }
    //}
    

    // 解法二

    void moveZeroes(int* nums, int numsSize) {
        int count = 0;
        for (int i = 0; i < numsSize; i++) {
            if (nums[i] != 0) {
                nums[count++] = nums[i];
            }
        }
        while (count < numsSize) {
            nums[count++] = 0;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:leetcode 初级之数组篇 08

          本文链接:https://www.haomeiwen.com/subject/esqjnftx.html