LeetCode283.移动零

移动零

题目链接

题目描述

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

示例:

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

说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。


题解

采用双指针法实现
i 用来遍历数组中的所有元素,找出非0元素;
j 用来存放非0元素,从下标0开始。

例如数组[0,1,0,3,12]
数组第一个非0元素的下标是 i = 1,此时 j = 0;
那么在下标为 j = 0 的位置存放下标为 i = 1 的元素,并将原 i = 1 的位置置0(相当于 i 和 j 位置的值进行交换),第一遍过后数组为[1,0,0,3,12]。
LeetCode283.移动零_第1张图片

class Solution {
    public void moveZeroes(int[] nums) {
        int j = 0;
        for(int i=0; i<nums.length; i++){
            if(nums[i] != 0){
                if(i != j){
                    nums[j] = nums[i];
                    nums[i] = 0;
                }
                j++;
            }
        }
    }
}

时间复杂度O(n),空间复杂度O(1)。

你可能感兴趣的:(LeetCode刷题,leetcode,java)