leetcode#283 移动零

2020-07-15  本文已影响0人  leeehao

审题

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

题目解析

将所有大于 0 的数字移动到数组头部并保持原有顺序,注意本题不允许额外内存开销。

第一次

暴力解法,如果某个位置存在 0 值,那么持续向后查询,将查询到的第一个数字填充到此位置。

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

第二次

仔细审题可以发现,正整数总是按顺序在前面,遇到正整数只需无脑填充到指定位置就可以了,并且在最后一个目标位置后填充 0

class Solution {
    public void moveZeroes(int[] nums) {
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[index] = nums[i];
                index++;
            }
        }
        for (int i = index; i < nums.length; i++) {
            nums[i] = 0;
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读