力扣 283. 移动零 (我的巧妙方法)
这类对数组操作的题目一般会限制时间复杂度或空间复杂度,并且考察数组不能修改大小的特点。且这类数组题目很灵活,不能简单套用遇到过的题目做法。这种题一般用到双指针法。
对数组元素的删除操作一般是通过覆盖不需要的元素,而非直接去掉不需要的元素。此题需要在原来的数组数组上操作,移动所有的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++;
}
}
}