题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
思路:
去重才需要升序,移除指定元素则不需要数组有序!
即将值为0的元素删掉,再将后面空出来的地方全补上0
删除元素部分:LeetCode 27:移除元素
class Solution {
public void moveZeroes(int[] nums) {
// 原地删除数组中为0的元素,并返回数组个数
int index=remove(nums,0);
for(int i=index;i<nums.length;i++){ // 从index到最后都为0
nums[i]=0;
}
}
private int remove(int[]nums,int val){
// 快慢指针
int fast=0;
int slow=0;
int n=nums.length;
while(fast<n){
if(nums[fast]==val){
fast++; // 跳过val值
}else{
nums[slow]=nums[fast];
slow++;
fast++;
}
}
return slow; // slow多右移一次,刚好等于数组元素的个数
}
}