题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
运行结果
解题思路
双指针:一个指向排好的后一位,一个指向待排的元素
当待排元素为0时,直接待排指针右移
当待排元素不为0时,如果两个指针相等(则证明前边没0),则双指针都右移。否则左右指针数据交换后都右移。----又因为这种情况下,左指针一定为0,可以直接使用
java代码
class Solution { public void moveZeroes(int[] nums) { //循环:如果之前有0,则找到最左边的0与之交换 /*int n=nums.length; boolean tag=false; for(int i=0;i<n;i++){ if(nums[i]==0){ tag=true; } else if(tag==true){ for(int j=i-1;j>=0;j--){ if(nums[j]!=0){ nums[j+1]=nums[i]; nums[i]=0; break; } else if(j==0){ nums[0]=nums[i]; nums[i]=0; } } } }*/ //双指针:左指针指向左侧非零,右指针指向待排数 int left=0,right=0; while(right < nums.length){ if(nums[right]!=0){ if(left != right){ //int temp=nums[left]; nums[left]=nums[right]; nums[right]=0; } left++; } right++; } } }