LeetCode - 283. Move Zeroes

链接

283. Move Zeroes

题意

给定一个数组,将其中所有的零移动至数组末尾,而非零数字的相对位置保持不变。
要求:

  1. 就地移动
  2. 操作数最少

思路

方法1:先找到所有0的个数,然后直接将数组中非0元素一个一个插入,再根据0的个数补齐数组。
方法2:来自讨论区,发现根本不需要计算0的个数。直接将非0元素一个一个插入,然后补齐0即可。

代码

Java 1:

public class Solution {
    public void moveZeroes(int[] nums) {
        int count = 0;
        int index = 0;
        for(int i = 0; i < nums.length; i++) // 找所有0的个数
            if(nums[i] == 0) count++;
        if(count == nums.length) return;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[index++] = nums[i];
            }
        }
        for(int i = nums.length - count; i < nums.length; i++) {
            nums[i] = 0;
        }
    }
}
// Your runtime beats 20.74 % of java submissions.

Java 2:

public void moveZeroes(int[] nums) {
    if (nums == null || nums.length == 0) return;        

    int insertPos = 0;
    for (int num: nums) {
        if (num != 0) nums[insertPos++] = num;
    }        

    while (insertPos < nums.length) {
        nums[insertPos++] = 0;
    }
}
// Your runtime beats 74.30 % of java submissions.
posted @ 2017-04-27 13:00  zyoung  阅读(173)  评论(0编辑  收藏  举报