题目:给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
要求:① 必须在原数组上操作,不能拷贝额外的数组。② 尽量减少操作次数。
示例:输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
解法:双指针
public class MoveZeroes {
public static void moveZeroes(int[] nums) {
int indexNow = 0; // 用来赋值的指针
int indexNum = 0; // 用来遍历的指针
while(indexNum<nums.length){
if(nums[indexNum] != 0){
nums[indexNow] = nums[indexNum];
indexNow++;
}
indexNum++;
}
for(int i=indexNow;i<nums.length;i++){
nums[i] = 0;
}
}
public static void main(String[] args) {
int[] nums = {0,1,0,3,12};
moveZeroes(nums);
}
}