python每日一题——4移动0

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]

输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]

输出: [0]

答案

这道题可以使用双指针的方法解决,一个指针用来遍历数组,一个指针用来记录0的末尾位置。

具体步骤如下:

定义两个指针,一个指向当前遍历的位置,一个指向0的末尾位置。

遍历数组,如果当前元素为0,则将其移动到0的末尾位置,并将0的末尾位置指针向前移动一位。

如果当前元素不为0,则将其移动到当前位置,并将当前位置指针向前移动一位。

重复上述步骤,直到遍历完整个数组。

代码如下:

python 复制代码
def moveZeroes(nums):  
    if not nums:  
        return []  
    left = 0  # 当前遍历位置指针  
    right = 0  # 0的末尾位置指针  
    n = len(nums)  
    while left < n:  
        if nums[left] == 0:  
            nums[left], nums[right] = nums[right], nums[left]  
            right += 1  
        else:  
            nums[left] = nums[left] + 1  # 非零元素加上一个非零值,保证相对顺序不变  
            left += 1  
    return nums

时间复杂度为O(n),空间复杂度为O(1)。

相关推荐
MediaTea4 分钟前
Python 第三方库:PyTorch(动态计算图的深度学习框架)
开发语言·人工智能·pytorch·python·深度学习
kyle-fang15 分钟前
pytorch-张量转换
人工智能·pytorch·python
2301_7951672027 分钟前
玩转Rust高级应用 如何理解 Rust 实现免疫数据竞争的关键是Send 和 Sync 这两个 trait
开发语言·算法·rust
Blossom.11827 分钟前
AI Agent记忆系统深度实现:从短期记忆到长期人格的演进
人工智能·python·深度学习·算法·决策树·机器学习·copilot
yanxiaoyu11034 分钟前
Pycharm远程调用Autodl进行训练(关机后不影响)
ide·python·pycharm
云和数据.ChenGuang39 分钟前
Python 3.14 与 PyCharm 2025.2.1 的调试器(PyDev)存在兼容性问题
开发语言·python·pycharm
Q741_1471 小时前
C++ 面试高频考点 链表 迭代 递归 力扣 25. K 个一组翻转链表 每日一题 题解
c++·算法·链表·面试·递归·迭代
mortimer1 小时前
从零打造一款桌面实时语音转文字工具:PySide6 与 Sherpa-Onnx 的实践
python·github·pyqt
AnalogElectronic1 小时前
用AI写游戏4——Python实现飞机大战小游戏1
python·游戏·pygame
_fairyland1 小时前
数据结构 力扣 练习
数据结构·考研·算法·leetcode