移动零-leetcode

题目描述

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

解法

思路:

双指针的方法,一个指针cur记录当前数组最有一个非零数的位置,另外一个指针por作为探测指针,用来向后探测,寻找非零书的位置,当por找到一个非零数时,cur+1位置的赋值为该非零数,por位置元素变为0,之后por继续向后探测。

代码:

import java.util.Arrays;
import java.util.Scanner;

public class leetcode_004 {
    public static void moveZeroes(int[] nums) {
        //两个指针,一个记录前面数组最后一个非零数的位置,一个探针,寻找非零数位置
        int cur=-1,por=1;
        if(nums==null || nums.length==1){
            System.out.println(nums[0]);
            return;
        }
        for(por=0;por<nums.length;por++){
            if(nums[por]!=0){
                int temp=nums[por];
                nums[por]=0;
                nums[cur+1]=temp;
                cur++;
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] line = sc.nextLine().split(",");
        int[] nums= Arrays.stream(line).mapToInt(Integer::parseInt).toArray();
        moveZeroes(nums);
        for (int i:nums) {
            System.out.print(i+" ");
        }
    }
}

posted @ 2025-09-07 16:38  狐狸胡兔  阅读(4)  评论(0)    收藏  举报