一 题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
二 方法代码
-
方法一(Java)
public class LeetBook283 {
public void moveZeroes(int[] nums) {
//主要思路:遇到每一个非零的数,就按顺序重新填充数组,遇到零就跳过。
//如果没遇到0,那非零数就是重新覆盖,有遇到过1个、2个、3个...0,非零数就是依次前移1个、2个、3个...位置
//最后剩余的空余位置填充零
int left = 0;//left指针,left指针为重新填充数组的位置指针
for(int i = 0;i < nums.length;i++){
if(nums[i] != 0){
nums[left] = nums[i];//也可以写成nums[left++] = nums[i]
left++;
}
}
for(int i = left;i < nums.length;i++ ){
nums[i] = 0;
}
}
}
-
方法二(Python)
class Solution(object):
def moveZeroes(self, nums):
left = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[left] = nums[i]
left += 1
for i in range(left, len(nums)):#从left到len(nums)但不包括右边
nums[i] = 0