美文网首页
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