问题
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
例子
思路
遍历数组,把不为空的向前插,index是不为零的最后一个下标,之后的位置都填入0
代码
class Solution {
public void moveZeroes(int[] nums) {
//index为不为零的最后一个下标
int index=-1;
for (int i=0; i<nums.length; i++)
if (nums[i]!=0) nums[++index]=nums[i];
for (int i=index+1; i<nums.length; i++)
nums[i]=0;
}
}
//方法2
class Solution {
public void moveZeroes(int[] nums) {
int limit=nums.length-1;//最后一个不为0的下标
while(limit>=0) {
if(nums[limit]==0) limit--;
else break;
}
for(int i=limit-1;i>=0; i--) {
if(nums[i]==0) {
for(int j=i; j<limit; j++)
nums[j]=nums[j+1];
nums[limit--]=0;
}
}
return ;
}
}
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
index=-1
for i in range(len(nums)):
if nums[i]!=0:
index+=1
nums[index]=nums[i]
for i in range(index+1,len(nums)):
nums[i]=0