题目详情
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].这道题的意思就是将一个数组里面的所有0移到数组的最后,同时要保持数组的非零元素顺序不变
同时这道题也有额外的要求:不能声明一个新的拷贝的数组以及尽量减少操作的次数
思路
- 因为题目不允许我们新声明一个数组,而且非零元素都排在新数组的最前面。
- 因此我们有这样一个想法:用一个值保存当前遍历到的非零元素数量,并将第i个元素赋值给数组下标为i-1的元素。这样后面剩下的位置,都赋值为0即可满足题目的要求。
解法
public void moveZeroes(int[] nums) {
if(nums != null && nums.length == 0) return;
int insertPost = 0;
for(int num : nums){
if(num != 0){
nums[insertPost++] = num;
}
}
while(insertPost < nums.length){
nums[insertPost++] = 0;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。