题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a2e5b93bae084c5ba05759ce66c0ebb0.png#pic_center)
解法一
- 思路: 采用双指针的思路,首先对当前数组遍历一次,记录非零值,在进行遍历补0(两次遍历)
public void moveZeroes(int[] nums) {
if(nums==null) {
return;
}
int j=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
nums[j++]=nums[i];
}
}
for(int i=j;i<nums.length;i++){
nums[i]=0;
}
}
解法二
-思路:同样双指针思想,交换排序思想,当前值不为0就交换(一次遍历)遍历结束后nums[j]的值即为第一个0
public void moveZeroes(int[] nums) {
if(nums==null) {
return;
}
int j=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
j++;
}
}
}