283. Move Zeroes

package LeetCode_283

/**
 * 283. Move Zeroes
 * https://leetcode.com/problems/move-zeroes/description/
 *
 * Given an array nums,
 * write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
 *
Example:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
 * */
class Solution {
    /*
    * solution: loop to check the element if 0 or not and use index to reset the position of element in array,
    * Time:O(n), Space:O(1)
    * */
    //algorithm 1: move zero to the end
    fun moveZeroes(nums: IntArray): Unit {
        var index = 0
        for (i in nums.indices) {
            if (nums[i] != 0) {
                nums[index++] = nums[i]
            }
        }
        for (i in index until nums.size) {
            nums[i] = 0
        }
    }

    //algorithm 2: move zero to the front
    fun moveZeroesToFront(nums: IntArray): Unit {
        val n = nums.size - 1
        var index = nums.size - 1
        for (i in n downTo 0) {
            if (nums[i] != 0) {
                nums[index--] = nums[i]
            }
        }
        for (i in index downTo 0) {
            nums[i] = 0
        }
    }
}

 

posted @ 2020-11-17 11:55  johnny_zhao  阅读(73)  评论(0编辑  收藏  举报