目录
题目描述
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.
高票解法
作者kurteck
// Shift non-zero values as far forward as possible
// Fill remaining space with zeros
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 moveZeroes(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[count] = nums[i];
count++;
}
}
while (count < nums.length) {
nums[count] = 0;
count++;
}
}
分析比较
思路一样,但是高赞答案更简洁。体现在两个地方:
1.对数组的遍历,高赞答案用的for (int num: nums) ,我用的for (int i = 0; i < nums.length; i++)
2.变量的自增,高赞答案用的nums[insertPos++]和nums[insertPos++],我用的类似 nums[count] = 0;count++;