美文网首页
LeetCode:283. 移动零

LeetCode:283. 移动零

作者: alex很累 | 来源:发表于2022-02-01 15:18 被阅读0次

    问题链接

    283. 移动零

    问题描述

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

    • 请注意 ,必须在不复制数组的情况下原地对数组进行操作。
    • 1 <= nums.length <= 104
    • -231 <= nums[i] <= 231 - 1

    示例

    实例1
    输入: nums = [0,1,0,3,12]
    输出: [1,3,12,0,0]
    
    实例2
    输入: nums = [0]
    输出: [0]
    

    解题思路

    核心:双指针

    1. 如果不限制“原地对数组进行操作”的话,我们可以创建一个数组,遍历原数组,如果不为0,放入到新数组中。
    2. 我们可以基于限制条件进行优化,直接使用原数组,遍历原数组,将找到的第0个不为0的数放到数组的第0位,将找到的第1个不为0的数放到数组的第1位......
    3. 大概就是这个意思,当然,在换位置的时候,还要将这个数原来的位置变成0;
      其中还要注意:[1,2,3,0,4],前面几个数其实位置没有发生变化,不需要置0操作。

    代码示例(JAVA)

    class Solution {
        public void moveZeroes(int[] nums) {
            int index = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] != 0) {
                    nums[index] = nums[i];
                    if (index != i) {
                        nums[i] = 0;
                    }
                    index++;
                }
            }
        }
    }
    

    执行结果

    相关文章

      网友评论

          本文标题:LeetCode:283. 移动零

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