283. Move Zeroes

作者: 番茄晓蛋 | 来源:发表于2016-11-02 15:01 被阅读3次

    My Submissions

    Total Accepted: 131094
    Total Submissions: 279468
    Difficulty: Easy
    Contributors: Admin

    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:
    You must do this in-place without making a copy of the array.
    Minimize the total number of operations.

    Credits:Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

     // Shift non-zero values as far forward as possible
        // Fill remaining space with zeros
        // ref: https://discuss.leetcode.com/topic/24716/simple-o-n-java-solution-using-insert-index
        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;
            }
        }
        
        public void moveZeroesFailed(int[] nums) {
            for (int i = 1; i < nums.length; i++) {
                if (nums[i - 1] == 0) {
                    swap(nums, i - 1, i);
                }
            }
         
        }
        
        public void swap(int[] nums, int j, int k) {
            int temp = nums[j];
            nums[j] = nums[k];
            nums[k] = temp;
        }
    

    相关文章

      网友评论

        本文标题:283. Move Zeroes

        本文链接:https://www.haomeiwen.com/subject/ssivuttx.html