283. 移动零
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
题解:
这道题是移动0到末尾,还需要保持原数组其他元素的相对位置,那我们可以采用双指针的方法,一个指针j去寻找不是0的数,找到后与指针++i交换,i初始位置是-1,如当j指向数组下标为0的位置,这时值为0,j继续向后移动,当指向数组下标为1的位置,满足条件,开始交换,依次往复就可以把0移动到末尾位置(双指针含义,j是寻找数组中不为0的元素,i位置之前(包括i)是不包含为0的元素)
class Solution {public void moveZeroes(int[] nums) {int i=-1;int j=0;while(j<nums.length){if(nums[j]!=0){swap(++i,j,nums);}j++;}}void swap(int a,int b,int[]nums){int t=nums[a];nums[a]=nums[b];nums[b]=t;}
}