【13.移动零】

37 阅读1分钟

题目

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

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

示例 1:

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

题解

方式一:双指针

复杂度:O(n)

public void moveZeros(int[] nums) {
    int left = 0; // 已处理好的数据尾部
    int right = 0; // 未处理的数据头部
    while (right < nums.length) {
        if (nums[right] != 0) {
            swap(nums, left, right);
            left++;
        }
        right++;
    }
}

public void swap(int[] nums, int i, int j) {
    int tem = nums[i];
    nums[i] = nums[j];
    nums[j] = tem;
}

总结

算法:双指针