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.
Example:
Input: [0,1,0,3,12]
Output: [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.
解析:
-
想到的解法是,把array中每个非0数字都往前挪一挪,挪到哪里?可以设置一个pos指针,pos从索引0开始,遍历数组时,把非0数字都赋值到pos位置,然后pos自增1,直到遍历结束。这个算法时间复杂度是o(n),但是空间复杂度不是最优。所以还有一种解法是互换位置。以下只列出第一种解法:
class Solution { public void moveZeroes(int[] nums) { int zeroPos = 0; for(int i = 0;i < nums.length;i++){ if(nums[i] != 0){ nums[zeroPos] = nums[i]; zeroPos++; } } while(zeroPos < nums.length){ nums[zeroPos] = 0; zeroPos++; } } }