Java实现算法-移动零

220 阅读1分钟

题目描述:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 注意:必须在不复制数组的情况下原地对数组进行操作。

示例:

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

解题思路:

通过题目描述可以知道此题可以使用双指针来做,控制一个left的指针,和一个right的指针,left代表的是正常数字的大小,数组长度 - right则代表0的数量。 边界值处理: 当left == right时,我们应该中止循环。因为此时的位置已经全部移动完毕。

具体实现:

class Solution {
    public void moveZeroes(int[] nums) {
        int left = 0, right = nums.length - 1;
        while(left < right){
            if(nums[left] == 0){
                // 数组向前移动\
                int target = 0;
                for(int i = left; i < right;i++){
                    nums[i] = nums[i+1];
                }
                nums[right] = 0;
                right--;
            }else{
                left++;
            }
        }
    }
}