网站开发环境实验报告,乐山企业品牌网站建设,网站海外推广服务,网站升级需要什么LeetCode.283移动零 1.问题描述2.解题思路3.代码 1.问题描述
给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。
请注意 #xff0c;必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums [0,1… LeetCode.283移动零 1.问题描述2.解题思路3.代码 1.问题描述
给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。
请注意 必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums [0,1,0,3,12]
输出: [1,3,12,0,0]示例 2:
输入: nums [0]
输出: [0]提示:
1 nums.length 104-231 nums[i] 231 - 1
2.解题思路
双指针
设置两个指针指向开头元素。一个fast指针一个slow指针fast指针向右移动如果元素为0不执行操作向右移动如果元素不为0将fast指针所指元素移到slow指针所在的位置slow指针向右移动一位当fast指针向右移动出界之后将当前slow指针指向元素及其之后元素设置为0 3.代码
python双指针
from typing import Listclass Solution:def moveZeroes(self, nums: List[int]) - None:# 设置一个变量用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上# 一开始默认在索引为 0 的位置slow 0# 从头到尾遍历数组# 遍历完毕之后slow 指向了一个为 0 的元素或者如果数组中不存在 0 就和 fast 一样超过了数组的范围for fast in range(len(nums)):# 在遍历过程中如果发现访问的元素是非 0 元素# 说明 slow 不在正确的位置上需要向后移动寻找合适的位置if nums[fast] ! 0:# 这个时候原先 slow 的值需要被 fast 的值覆盖nums[slow] nums[fast]# slow 需要向后移动寻找合适的位置slow 1# 接下来只需要把 slow 极其后面所有的元素都设置为 0 就行for i in range(slow, len(nums)):# 都设置为 0nums[i] 0return numssolution Solution()
res solution.moveZeroes([0, 1, 2, 0, 3])
print(res)
C双指针
class Solution {
public:void moveZeroes(vectorint nums) {// 设置一个变量用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上// 一开始默认在索引为 0 的位置int slow 0;for (int fast 0; fast nums.size(); fast) {// 在遍历过程中如果发现访问的元素是非 0 元素// 说明 slow 不在正确的位置上需要向后移动寻找合适的位置if (nums[fast] ! 0) {// 这个时候原先 slow 的值需要被 fast 的值覆盖nums[slow] nums[fast];// slow 需要向后移动寻找合适的位置slow;}}// 接下来只需要把 slow 极其后面所有的元素都设置为 0 就行for (int i slow; i nums.size(); i) {// 都设置为 0 nums[i] 0;}}
};