首页 > 其他 > 详细

Move Zeros LT283

时间:2019-05-12 10:14:18      阅读:116      评论:0      收藏:0      [点我收藏+]

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.

Example:

Input: [0,1,0,3,12]
Output: [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.

Idea 1. Two pointer, as partion array in quick sort, move all non-zeros to the front.

Time complexity: O(N)

Space complexity: O(1)

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

Idea 1.a if there are more zeros, swap elements, save the step to put zeros to the end, only swap if there are zeros on the left, no need to write back to the same element

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

 

Move Zeros LT283

原文:https://www.cnblogs.com/taste-it-own-it-love-it/p/10850833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!