zoukankan      html  css  js  c++  java
  • 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;
                }
            }
            
            
        }
    }

    结果:

    总结:

    注意边界条件。

  • 相关阅读:
    修改浏览器滚动条样式
    js实现无缝轮播
    JS (canvas) 两个小球碰撞
    js里div随着鼠标一起移动
    js的动态加载、缓存、更新以及复用
    js阻止事件冒泡的两种方法
    核心DOM和html DOM的区别
    JavaScript 事件流、事件处理程序及事件对象总结
    css3 实现飞入由小变大
    简单手写js轮播
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8869995.html
Copyright © 2011-2022 走看看