给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
从头分别找到第一个0和之后第一个非0的数进行交换,然后依次往下找0和非0数交换,即把数组看出非零数组和零数组,从头依次交换直至所有的零都在后面
class Solution {
public void moveZeroes(int[] nums) {
int str0 = 0; //为0的指针
int str1 = 0;//不为零的指针
while (str1<nums.length){
while (str0<nums.length&&nums[str0]!=0){
str0++;
}
str1 = str0;
while (str1<nums.length&&nums[str1]==0){
str1++;
}
if(str1<nums.length){
int tmp = nums[str0];
nums[str0] = nums[str1];
nums[str1] = tmp;
}
}
}
}
原文:https://www.cnblogs.com/ermiao-zy/p/14890095.html