Leetcode 283-移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
题解
题解参考自王尼玛
借鉴快排的思想,将0作为哨兵,从左到右将所有不为零的元素和零元素进行交换
1.left指向第一个为零的元素,right指向left后第一个不为零的元素
2.将nums[left]和nums[right]对换
3.left和right继续移到下一个为零和不为零的位置,直至数组遍历结束
class Solution {
public void moveZeroes(int[] nums) {
int left=0,right=0;
while(right<nums.length){
//left指向第一个为0的元素或者数组长度+1的位置
while(left<nums.length&&nums[left]!=0) left++;
right=left+1;
//right指向第一个为0的元素或者数组长度+1的位置
while(right<nums.length&&nums[right]==0) right++;
if(right<nums.length){
int tmp=nums[left];
nums[left]=nums[right];
nums[right]=tmp;
}
}
}
}