283. 移动零
发布人:shili8
发布时间:2025-02-22 07:02
阅读次数:0
**移动零**
移动零是一道经典的算法题目,要求在一个数组中,将所有零元素移到数组的右边。这个问题可以应用在很多实际场景中,如数据清理、排序等。
**问题描述**
给定一个整数数组 `nums`,请将所有零元素移到数组的右边,不改变非零元素之间的相对顺序。
**示例**
输入:`[0,1,0,3,12]`
输出:`[1,3,12,0,0]`
**解决方案**
### 方法一:双指针法
def moveZeroes(nums): """ 移动零,移动所有零元素到数组的右边。 Args: nums (list): 整数数组 Returns: list: 修改后的数组 """ # 初始化两个指针,left用于扫描非零元素,right用于记录下一个零元素的位置 left =0 right =0 # 遍历数组,直到所有非零元素被移动到左边 while right < len(nums): # 如果当前元素是非零元素,则将其与left指针对应的元素交换,并且右指针向右移动 if nums[right] !=0: nums[left], nums[right] = nums[right], nums[left] left +=1 right +=1 return nums# 测试用例nums = [0,1,0,3,12] print(moveZeroes(nums)) # 输出:[1,3,12,0,0]
### 方法二:使用列表推导式和切片
def moveZeroes(nums): """ 移动零,移动所有零元素到数组的右边。 Args: nums (list): 整数数组 Returns: list: 修改后的数组 """ # 使用列表推导式将非零元素移到左边,并且使用切片将零元素移到右边 return [x for x in nums if x !=0] + [x for x in nums if x ==0] # 测试用例nums = [0,1,0,3,12] print(moveZeroes(nums)) # 输出:[1,3,12,0,0]
### 方法三:使用系统函数
def moveZeroes(nums): """ 移动零,移动所有零元素到数组的右边。 Args: nums (list): 整数数组 Returns: list: 修改后的数组 """ # 使用列表推导式和切片将非零元素移到左边,并且使用切片将零元素移到右边 return [x for x in nums if x !=0] + [x for x in nums if x ==0] # 测试用例nums = [0,1,0,3,12] print(moveZeroes(nums)) # 输出:[1,3,12,0,0]
**总结**
移动零是一道经典的算法题目,要求在一个数组中,将所有零元素移到数组的右边。这个问题可以应用在很多实际场景中,如数据清理、排序等。上述方法提供了三种不同的解决方案,分别使用双指针法、列表推导式和切片,以及系统函数来实现移动零的功能。