[Leetcode]Move Zeroes

来源:互联网 发布:绿茶软件园php源码 编辑:程序博客网 时间:2024/04/30 08:18

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.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

方法一:时间复杂度O(N^2)
public class Solution {    public void moveZeroes(int[] nums) {        if (nums == null || nums.length == 1) {            return;        }                int zeroCount = 0;        int zeroSequenceLength = 0;        for (int i = 0; i < nums.length - zeroCount; i++) {            if (0 == nums[i]) {                ++zeroSequenceLength;            } else {                if (zeroSequenceLength >= 1) {                    for (int j = i; j < nums.length - zeroCount; j++) {                        nums[j - zeroSequenceLength] = nums[j];                    }                                        zeroCount += zeroSequenceLength;                    i = i - zeroSequenceLength;                    zeroSequenceLength = 0;                }            }        }        for (int k = nums.length - 1; k > nums.length - 1 - zeroCount; k--) {            nums[k] = 0;        }    }}

方法二:时间复杂度O(N)
public class Solution {    public void moveZeroes(int[] nums) {        int newIndex = 0;                for (int i = 0; i < nums.length ; i++) {            if (nums[i] != 0) {                nums[newIndex++] = nums[i];            }        }        for (; newIndex < nums.length; newIndex++) {            nums[newIndex] = 0;        }    }}


1 0