给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
我写的代码思路是从开始元素找0,找到了就将这个0后面的元素向前移一位
class Solution {public void moveZeroes(int[] nums) {int n = nums.length;for(int i = 0;i<n;i++){if(nums[i] == 0){for(int j = i;j<n-1;j++){nums[j]=nums[j+1];//移位}nums[n-1]=0;n--;i--;//由于数组改变,i位需要在判断一次是否为0}}}
}
看到的更好的代码:
思路是将不为零的元素重新排列,末尾补0
class Solution {public void moveZeroes(int[] nums) {int i = 0;for(int x:nums){if(x!=0)nums[i++] = x; }for(int j = i;j<nums.length;j++)nums[j] = 0;}
}