题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
思路:利用双指针法,左指针指像已经处理好序列尾部,右指针指向未处理序列头部。右指针不断向右移动,遍历每一个元素,当指向非零元素时,则调用交换函数对位置进行调换。同时左指针也进行移动。
class Solution {
public void moveZeroes(int[] nums) {
int n =nums.length;
int left=0,right=0;
while(right< n)
{
if(nums[right]!=0)
{
swap(nums,left,right);
left++;
}
right++;
}
}
public void swap(int[]nums,int left,int right) //进行数组间元素位置交换
{
int temp=nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}