当前位置:实例文章 » JAVA Web实例» [文章]283. 移动零

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]


**总结**

移动零是一道经典的算法题目,要求在一个数组中,将所有零元素移到数组的右边。这个问题可以应用在很多实际场景中,如数据清理、排序等。上述方法提供了三种不同的解决方案,分别使用双指针法、列表推导式和切片,以及系统函数来实现移动零的功能。

其他信息

其他资源

Top