283. 移动零

image

283. 移动零

思路

  1. 使用一个指针 i 来记录当前非零元素应该放置的位置。
  2. 遍历数组,如果当前元素不为零,则将其放到 i 的位置,并将 i 向后移动一位。
  3. 遍历结束后,从 i 开始到数组末尾的所有位置都设置为 0。

复杂度分析

  • 时间复杂度:O(n),其中n是数组长度。进行了两次独立遍历
  • 空间复杂度:O(1),只使用了常数级别的额外空间

代码

class Solution {
    public void moveZeroes(int[] nums) {
        int slow = 0;  // 慢指针:标记非零元素应放置的位置
        
        // 1. 将非零元素移动到数组前部
        for (int fast = 0; fast < nums.length; fast++) {
            if (nums[fast] != 0) {
                nums[slow] = nums[fast];  // 将非零元素移动到前部
                slow++;
            }
        }
        
        // 2. 将剩余位置填充为0
        for (int i = slow; i < nums.length; i++) {
            nums[i] = 0;
        }
    }
}

posted @ 2025-08-09 00:48  quanht  阅读(7)  评论(0)    收藏  举报