11.png

解法一

indexs: 用来记录元素为0的下标
先遍历nums将为0的下标记录,然后倒着遍历nums 将indexs中记录的下标都删除,最后在最后加index.length个0。

/*
* @lc app=leetcode.cn id=283 lang=javascript
*
* [283] 移动零
*/

// @lc code=start
/**
* Time complexity: O(n)
* spatiay complexity: O(n)
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
    let indexs = [];
    nums.forEach((item, index) => {
        if (item == 0) {
            indexs.push(index);
        }
    })
    for (let i = nums.length; i >= 0; i--) {
        if (indexs.includes(i)) {
            nums.splice(i, 1);
        }
    }
    indexs.forEach(item => {
        nums.push(0);
    })
    return nums;
};
// @lc code=end

解法二

思想是将非零元素向左挪, 非零元素都挪到左边了,剩下的就都是0了 我们创建两个指针 i 和 j,第一次遍历的时候指针j用来记录非0元素往数组左边挪到了第几位,第一次遍历完后,j指针的下标就指向了最后一个 非0 元素下标。 第二次遍历的时候,起始位置就从 j 开始到结束,将剩下的这段区域内的元素全部置为 0。

/*
* @lc app=leetcode.cn id=283 lang=javascript
*
* [283] 移动零
*/

// @lc code=start
/**
* Time complexity: 
* spatiay complexity: 
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
    if(nums.length == 1){
        return nums;
    }
    let j = 0;
    for(let i =0 ; i< nums.length ;i++){
        if(nums[i]!=0){
            nums[j++] = nums[i]; 
        }
    }
    for(let i= j; i< nums.length; i++){
        nums[i] =0;
    }
    return nums;
};
// @lc code=end

/*
* @lc app=leetcode.cn id=283 lang=java
*
* [283] 移动零
*/

// @lc code=start
class Solution {
    public void moveZeroes(int[] nums) {

        int j = 0 ;
        for(int i =0 ; i < nums.length ; i++){
            int num = nums[i];
            if(num != 0){
                nums[j++] = num;
            }
        }
        for(int i = j ; i < nums.length ; i++){
            nums[i] = 0;
        }

    }
}
// @lc code=end

解法3

function bubbleSort(nums){
    for(let i = nums.length - 1 ; i > 0 ; i-- ){
        for(let j = 0 ; j < i ; j++ ){
            if(nums[j] == 0){
                [nums[j+1], nums[j]] =  [nums[j], nums[j+1]]
            }
        }
    }
}