力扣 283. 移动零 (我的巧妙方法)

力扣 283. 移动零 (我的巧妙方法)

image.png

这类对数组操作的题目一般会限制时间复杂度或空间复杂度,并且考察数组不能修改大小的特点。且这类数组题目很灵活,不能简单套用遇到过的题目做法。这种题一般用到双指针法。

对数组元素的删除操作一般是通过覆盖不需要的元素,而非直接去掉不需要的元素。此题需要在原来的数组数组上操作,移动所有的0,而且不改变非0元素的相对位置,所以可以考虑把非0元素覆盖到0元素上,把非0元素置为0,这个操作相当于交换非0元素和0元素。

class Solution {
    public void moveZeroes(int[] nums) {
        if(nums.length==1)return;

        int left=0, right=1;
        for(; right<nums.length; right++){
            if(nums[left]==0&&nums[right]!=0){
                nums[left]=nums[right];
                nums[right]=0;
                left+=1;
            }else if(nums[left]!=0)left++;
        }
    } 
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注