跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

力扣 Hot 100 普通数组题解 Python 版

力扣 Hot 100 普通数组专题包含最大子数组和、合并区间、轮转数组、除自身以外数组的乘积及缺失的第一个正数五道经典题目。内容涵盖前缀和、动态规划、数组反转、前后缀分解等核心算法思想,提供 Python 完整代码实现及复杂度分析,旨在帮助开发者掌握数组类问题的通用解法与优化技巧。

AiEngineer发布于 2026/3/27更新于 2026/7/2933 浏览
力扣 Hot 100 普通数组题解 Python 版

一、53. 最大子数组和

思路 1:前缀和优化

维护最小前缀和,避免双重循环。

class Solution:
    def maxSubArray(self, nums):
        if len(nums) == 1:
            return nums[0]
        res = float('-inf')
        preSum = 0
        minPreSum = 0
        for n in nums:
            preSum += n
            res = max(res, preSum - minPreSum)
            minPreSum = min(minPreSum, preSum)
        return res

思路 2:动态规划

定义 dp[i] 表示以 nums[i] 结尾的最大子数组和。状态转移方程为 dp[i] = max(dp[i-1], 0) + nums[i]。

class Solution:
    def maxSubArray(self, nums):
        dp = [0] * len(nums)
        dp[0] = nums[0]
        for i in range(1, len(nums)):
            dp[i] = max(dp[i-1], 0) + nums[i]
        return max(dp)

二、56. 合并区间

思路

先将 intervals 中的区间按起始位置排序。遍历区间,若当前区间与结果集最后一个区间有交集则合并,否则加入新区间。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda p: p[0])
        res = []
        for p in intervals:
            if res and p[0] <= res[-1][1]:
                res[-1][1] = max(res[-1][1], p[1])
            else:
                res.append(p)
        return res

三、189. 轮转数组

思路

使用三次反转法实现原地旋转,避免额外空间开销。

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        def reverse(i, j):
            while i < j:
                nums[i], nums[j] = nums[j], nums[i]
                i += 1
                j -= 1
        n = len(nums)
        k %= n
        reverse(0, n - 1)
        reverse(0, k - 1)
        reverse(k, n - 1)

四、238. 除自身以外数组的乘积

思路

前后缀分解。维护 pre[i] 表示 0 到 i-1 的乘积,suf[i] 表示 i+1 到 n-1 的乘积。

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        pre = [1] * n
        for i in range(1, n):
            pre[i] = pre[i-1] * nums[i-1]
        suf = [1] * n
        for i in range(n-2, -1, -1):
            suf[i] = suf[i+1] * nums[i+1]
        return [p * s for p, s in zip(pre, suf)]

五、41. 缺失的第一个正数

思路

将每个数字放到自己值对应的索引位置上(原地哈希)。

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        n = len(nums)
        for i in range(n):
            while 1 <= nums[i] <= n and nums[nums[i]-1] != nums[i]:
                nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
        for i in range(n):
            if nums[i] != i + 1:
                return i + 1
        return n + 1

目录

  1. 一、53. 最大子数组和
  2. 思路 1:前缀和优化
  3. 思路 2:动态规划
  4. 二、56. 合并区间
  5. 思路
  6. 三、189. 轮转数组
  7. 思路
  8. 四、238. 除自身以外数组的乘积
  9. 思路
  10. 五、41. 缺失的第一个正数
  11. 思路
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 灵感画廊 AI 绘画环境配置指南
  • 使用 Higress 将 REST API 转换为 MCP Server 工具
  • 基于 OpenClaw 与 Claude 的自动化写作工作流搭建实践
  • GitHub Copilot Plan 模式:核心优势与使用场景解析
  • Llama-3.2V-11B-COT 部署:Triton 推理服务封装与压测
  • Spring Boot 中 Log4j2 日志配置指南
  • Clawdbot(Moltbot) 集成飞书机器人配置指南
  • FPGA 纯 Verilog 实现 2.5G UDP 协议栈,基于 1G/2.5G Ethernet PCS/PMA or SGMII
  • MySQL 和 Navicat 在 Windows 上的安装与连接教程
  • AI 时代下生物细胞学的最新进展
  • 二叉树深度优先搜索技巧:计算布尔值与路径数字之和
  • 基于 n8n 与 API 的自动化资讯采集与摘要推送系统
  • Windows 本地零代码部署 AI 大模型实战指南
  • Java 泛型核心概念:类、方法与上下限
  • Linux 进程优先级与调度机制详解
  • IDEA 连接 Gitee 配置及代码推送指南
  • 基于 Python Flask + Vue3 的学生信息管理系统设计与实现
  • Typora 软件安装与基础配置指南
  • VS Code 中配置 GitHub Copilot 自定义 Skill 的方法
  • Visual C++ 6.0 在 Windows 11 下的安装与兼容性配置

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online