【LeetCode刷题】移动零

给定一个数组 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

方法思路

  1. 定义指针 k :用于记录非零元素应该放置的位置,初始为 0
  2. 遍历数组 :将所有非零元素按原相对顺序移动到 k 指向的位置,每放置一个非零元素,k 自增 1
  3. 补零操作 :遍历结束后,将 k 到数组末尾的所有位置赋值为 0,完成 "将 0 移到末尾" 的操作。

Python代码:

python 复制代码
from typing import List


class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        k = 0  # 记录非零元素的放置位置
        for i in range(len(nums)):
            if nums[i] != 0:
                nums[k] = nums[i]
                k += 1
        # 将剩余位置填充为0
        for i in range(k, len(nums)):
            nums[i] = 0


# 主程序用于测试
if __name__ == "__main__":
    # 测试示例1
    nums1 = [0, 1, 0, 3, 12]
    solution = Solution()
    solution.moveZeroes(nums1)
    print("示例1结果:", nums1)

    # 测试示例2
    nums2 = [0]
    solution.moveZeroes(nums2)
    print("示例2结果:", nums2)

LeetCode提交代码:

python 复制代码
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        from typing import List
        k = 0  # 记录非零元素的放置位置
        for i in range(len(nums)):
            if nums[i] != 0:
                nums[k] = nums[i]
                k += 1
        # 将剩余位置填充为0
        for i in range(k, len(nums)):
            nums[i] = 0
        

程序运行截图展示:

总结

本文介绍了一种原地移动数组中所有零元素到末尾的算法。通过使用双指针法,定义指针k记录非零元素位置,首先遍历数组将所有非零元素前移,保持原有顺序;然后在剩余位置补零。该算法时间复杂度为O(n),空间复杂度O(1),满足题目要求。Python实现代码展示了示例测试结果,验证了算法的正确性。该方法高效地解决了在不复制数组情况下移动零元素的问题,适用于LeetCode等相关编程题目。

相关推荐
额鹅恶饿呃26 分钟前
C语言中的数据结构和变量
c语言·数据结构·算法
用户83562907805128 分钟前
使用 Python 自动化 Excel 公式和函数:完整指南
后端·python
敲代码的嘎仔1 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森1 小时前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python
VIP_CQCRE2 小时前
用 Ace Data Cloud 快速接入 OpenAI Chat Completions:对话、流式、多轮和多模态一篇打通
python·ai·openai·api·教程
AOwhisky2 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
运行时记录2 小时前
prompt-optimizer skill
算法
万法若空2 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
退休倒计时2 小时前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
老迟到的茉莉2 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python