LeetCode:283. 移动零

2022-02-01  本文已影响0人  alex很累

问题链接

283. 移动零

问题描述

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

示例

实例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++;
            }
        }
    }
}

执行结果

上一篇 下一篇

猜你喜欢

热点阅读