题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:
必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。
一次遍历
class Solution {
public void moveZeroes(int[] nums
) {
int point
=0;
for (int i
=0;i
<nums
.length
;i
++){
if(nums
[i
] ==0){
point
= i
+1;
while(point
<nums
.length
&& nums
[point
]==0 && point
>i
) point
++;
if(nums
[i
] == 0 && point
>i
&& point
<nums
.length
){
nums
[i
] = nums
[point
];
nums
[point
] = 0;
}
if(point
== nums
.length
-1) break;
}
}
}
}
一次遍历 优化
class Solution {
public void moveZeroes(int[] nums
) {
if(nums
==null
) return;
int point
=0;
for (int i
=0;i
<nums
.length
;i
++){
if(nums
[i
] !=0){
int tmp
= nums
[i
];
nums
[i
] = nums
[point
];
nums
[point
++] = tmp
;
}
}
}
}