zoukankan      html  css  js  c++  java
  • Leetcode 283 移动零

    题目跳转:https://leetcode-cn.com/problems/move-zeroes/

    拿到题目,瞄了一眼Tags,首先使用双指针方法暴力解决了本问题:

    /*
     * @lc app=leetcode.cn id=283 lang=java
     *
     * [283] 移动零
     */
    class Solution {
        public void moveZeroes(int[] nums) {
            int i = nums.length - 1;
            int j = -1;
            for(; i >= 0; i--){
                if(nums[i] == 0){
                    for(j = i + 1; j < nums.length; j++){
                        nums[j-1] = nums[j];
                    }
                    nums[j-1] = 0;
                }
            }
        }
    }
    

     然而这样子的后果就是:

       

    心里有点不爽,仔细瞄了一眼Top Voted Solution,心里想:“当时做的时候也有这样的思路,怎么就没想下去呢?“

    让我们来仔细看看Top Voted Solution:

    // Shift non-zero values as far forward as possible
    // Fill remaining space with zeros
    
    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;
        }
    }
    

      代码第一行先进行特殊情况的判断。

      第一个循环主要是为了将数组中非0的数据按照原来的顺序排好,insertPos是为了记录当前存放非0数据的位置。

      在第一个循环结束后,我们获得了insertPos,知道了在原来容量的数组中拥有多少个非0的数据,接下来我们要做的就是将剩下的位置填充0,即第二个循环。

    感叹一下:自己还是太菜了

      

  • 相关阅读:
    记账本开发第一天-补
    20200418-补
    20200411-补
    20200404-补
    20200328-补
    暴力解N皇后
    nN皇后递归
    Hanoi汉诺塔非递归栈解
    Hanoi汉诺塔递归
    JMMjmm模型
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/11243300.html
Copyright © 2011-2022 走看看