4.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]输出:[0]
【一次遍历】
思路: 两个指针 i 和 pre ,pre指向0元素,i 往后遍历找到距离pre 最近的一个非0元素,然后进行交换,pre++。只要nums[i]==0,直接 i++
{开始躲懒,直接nums[pre] = nums[i];nums[i] = 0
这样做有一个问题,例如nums=[1]。这样会导致直接在nums[i] = 0这步将1改成了0}
1 class Solution { 2 public void moveZeroes(int[] nums) { 3 int n = nums.length; 4 int pre=0; 5 int tmp = 0; 6 for(int i=0;i<n;i++){ 7 if(nums[i]!=0){ 8 tmp = nums[pre]; 9 nums[pre] = nums[i]; 10 nums[i] = tmp; 11 pre++; 12 } 13 } 14 } 15 }

浙公网安备 33010602011771号