• LeetCode 283. Move Zeroes


    问题:

    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.

    分析:

    双指针。 这一问题的一个中间步骤,应该是前m个数有序, 中间是n个0, 最后l个数无序。 第一个指针指向第一个0,第二个指针指向l个无序数中的第一个。

    当后个指针指向最后一个数的后一个位置时,所有步骤结束。

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

    结果:

    Run Code Status: Runtime Error
    Run Code Result:
    Your input
    
    [0,1,0,3,12]
    
    Your answer
    
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
        at Solution.moveZeroes(Solution.java:5)
        at __DriverSolution__.__helper__(__Driver__.java:8)
        at __Driver__.main(__Driver__.java:52)

    分析:

    二次:

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

    结果:

    Submission Result: Wrong Answer 
     
    Input: [1]
    Output: [0]
    
    Expected: [1]

    分析:

     还是不能直接赋值0.

    三次:

    class Solution {
        public void moveZeroes(int[] nums) {
            
            int temp;
            for(int i =0, j=0; j<nums.length; j++) {
                if(nums[j] == 0) {
                    
                    continue;
                } else {
                  
                    temp = nums[i];
                    nums[i] = nums[j];
                    i++;
                    nums[j] = temp;
                }
            }
            
            
        }
    }

    结果:

    总结:

    注意边界条件。

  • 相关阅读:
    pycharm快捷键
    Docker
    Go语言与Elasticsearch
    Celery与APScheduler
    爬虫入门到入狱
    数据分析
    后台管理
    Linux基础与自动化运维
    微信小程序
    Git
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8869995.html
Copyright © 2020-2023  润新知