给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
实例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
代码
//这道题正确的思路是找到所有非零元素,一个一个在数组排
//然后后面的元素全部补0
class Solution {
public void moveZeroes(int[] nums) {
int k=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
nums[k++]=nums[i];}
}
while(k<nums.length){
nums[k]=0;
k++;
}
}
}
注意
不能用冒泡,冒泡的复杂度是o(n2),一定超出时间限制
class Solution {
public void moveZeroes(int[] nums) {
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
for(int j=i;j<nums.length-1;j++){
nums[j]=nums[j+1];
}
nums[nums.length-1]=0;
//这里就是每次吧数组往前挪的时候,要重新判断这个位置的数,冒泡要注意的地方
i--;
}
}
}
}