力扣算法题分享——移动数组中的0

41 阅读1分钟

题干:

给定一个数组num,编写一个函数,移动数组中的0至末尾,同时保持非零元素的相同顺序,必须在不复制数组的情况下原地对数组进行操作

解法一:

import java.util.*;

public class Main {
  public void moveZero(int[] nums){
        int arrayLength = nums.length;
        int temp = 0;
        for(int i=0;i<arrayLength;i++){
            if(nums[i] == 0){
                temp = nums[i];
                for(int j=i;j<arrayLength-1;j++){
                    nums[j] = nums[j+1];
                }
                nums[arrayLength-1] = temp;
                arrayLength--;
                i--;
            }
        }
    }
   public static void main(String []args) {
       int[] array1 = new int[]{1,3,4,0,0,8,9,2,0,3};
        new Main().moveZero(array1);
        for(int i=0;i<array1.length;i++){
            System.out.print(array1[i] + " ");
        }
   }
}

运行结果: 3 2 7 4 9 0

解法二

public class Main6 {
    public void moveZero(int[] nums) {
            int index = 0,n = nums.length;
            for(int i = 0;i<n;i++){
                if(nums[i] != 0){
                    nums[index] = nums[i];
                    index++;
                }
            }
            for(int i = index;i<n;i++){
                nums[i] = 0;
            }
        }
    public static void main(String []args) {
           int[] array1 = new int[]{1,3,4,0,0,8,9,2,0,3};
            new Main6().moveZero(array1);
            for(int i=0;i<array1.length;i++){
                System.out.print(array1[i] + " ");
            }
       }
}

算法执行过程(以数组3 0 2 7 4 9为例)

屏幕截图 2025-11-17 185548.png

屏幕截图 2025-11-17 185555.png

运行结果: 3 2 7 4 9 0