LeetCode 283题 移动0 一次AC,解题思路|刷题打卡

262 阅读1分钟

一、题目描述

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

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明: 必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

二、思路分析:

题目说明不能开辟新的数组,应该就是考察对下标的控制。

保证时间复杂度的基础上 考虑双下标实现。

需要特别注意连续0的情况下标的控制。

三、AC 代码:

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

        }
    }
}

四、总结:

一维数组的操作大都可以把时间复杂度控制在O(n)

“本文正在参与「掘金 3 月闯关活动」,点击查看活动详情。”