每日一题---移动零
一、题目链接:283. 移动零 - 力扣(LeetCode)
二、解题思路
我们可以用一个right指针来扫描整个数组,然后用一个left指针来记录非零序列的最后一个位置,这样的话,在遍历期间我们可以将数组分为两个部分,第一个部分是[0,left],这一区间全为非零元素,第二个部分是[left+1,right],这一部分全是0,第三个部分是[right+1,nums.length-1],这一部分是还未扫描到的区间 。具体步骤如下:
1.定义两个变量left=-1,right=0。
2.用循环遍历数组,当right指向的数组不为0时,left++,交换left和right指向的元素,然后right++
3、当right指向的数组为0时,依旧right++
三、代码实现
class Solution {public void moveZeroes(int[] nums) {int left=-1,right=0;while(right<nums.length){if(nums[right]!=0){left++;swap(nums,right,left);}right++;}}public static void swap(int[] nums,int i,int j){int tmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}
}