移动零
需求
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序,并且必须在原数组上操作,不能拷贝额外的数组。
示例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
1
2
2
思路
采用类冒泡排序的思路,快慢指针遍历数组如果不是0就放到前面,是0就放到后面,也就是往后冒泡0
代码
public void moveZeroes(int[] nums) {
if(nums==null||nums.length==0){
return;
}
//定义慢指针在数组起点
int j=0;
//用快指针遍历数组
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){//如果不为0,与慢指针的元素交换位置,为0则慢指针不动
if(i!=j){//防止指针指向同一个元素的情况,减少交换次数
nums[j]=nums[i];
nums[i]=0;
}
j++;//交换结束后慢指针自增
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上次更新: 2023/12/29 11:32:56