给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
    示例:
    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:
    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。
    法一:
    遍历数组的每一个元素,如果不为零,就放到最前面,如果为0,就不管,最后将后面全部填为0
    时间复杂度:0(n)

    1. class Solution {
    2. public void moveZeroes(int[] nums) {
    3. if (nums == null || nums.length == 0) return;
    4. int insert = 0;
    5. for (int num : nums) {
    6. if (num != 0) {
    7. nums[insert] = num;
    8. insert++;
    9. }
    10. }
    11. while (insert < nums.length){
    12. nums[insert] = 0;
    13. insert++;
    14. }
    15. }
    16. }

    283. 移动零 - 图1
    法二:
    对数组里面的元素进行判断,如果不为0,就和第一个数字进行交换,慢慢将不为01的数字都移动到前面

    class Solution {
        public void moveZeroes(int[] nums) {
            int j = 0;
            for (int i=0; i<nums.length; i++) {
                if (nums[i] != 0){
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                    j++;
                }
            }
        }
    }
    

    283. 移动零 - 图2