题目描述
给定一个数组 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++;
}
}
}
京公网安备 11010502036488号