算法:移动零

题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。必须在不复制数组的情况下原地对数组进行操作。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

核心思想是,把第一个数看作0元素起点。每当找到非0元素,都把0元素起点与非0元素交换。这样0元素会逐步置后,且能保持非0元素的顺序。

具体步骤:

  1. 定义双指针,用i遍历数组,用j作为0元素的起点,j 初始为[0]。
  2. 当i找到非0元素时,j和i位置的元素交换,把非0元素置前,0元素置后。
  3. 交换元素后,移动 j 指针,这样j会指向下一个0起点

我的代码:

public void moveZeroes(int[] nums) {

        for(int i = 0,j = 0 ; i<nums.length; i++){
            if(nums[i]!=0){  //找到非0元素,把它置前
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
                j++;  // 注意要先交换元素,j才能后移
            }
        }
    }
posted @ 2025-07-22 01:00  junjunyi  阅读(42)  评论(0)    收藏  举报