leetcode-hot100(283.移动零)
方法一(遍历两次):
我们可以直接遍历整个数组,将非0元素赋值给另一个数组,之后再在该数组后面补0
class Solution {public void moveZeroes(int[] nums) {int j=0;for(int i = 0 ; i < nums.length ; i ++){if(nums[i]!=0){nums[j]=nums[i];j++;}for(int i=j;i<nums.length;i++){nums[i]=0;}}
}
方法二(遍历一次):
我们定义左右指针,左指针代表已经处理好的数组的尾部,右指针代表未处理数组的头部。如果右指针所指向的元素不为0,则与左指针代表的元素交换位置。并且左右指针都向后移动一位。否则不交换元素,并且只有右指针向右移动一位
class Solution {public void moveZeroes(int[] nums) {int left=0,right=0;for(int i=0;i<nums.length;i++){if(nums[right]!=0){swap(nums,left,right);left++;}right++;} }public void swap(int[] nums,int left,int right){int temp=nums[left];nums[left]=nums[right];nums[right]=temp;}
}