【Swift】LeetCode 53. 最大子数组和

53. 最大子数组和

题目描述

思路 and Swift 题解

这道题的思路其实很简单,本质上就是以某种规则在普通数组当中以O(n)O(n)O(n)的时间复杂度做一次统计。题目中已经明确告诉我们,子数组是数组中的一个连续部分,这就意味着,从第iii个元素开始,如果后面i+1,...i+1, ...i+1,...个元素都是正的,那么这些元素不断累加在一起,子数组的和将会越来越大;反之,如果其中出现了负值,那么将会减小子数组的和。如果从第iii个元素开始,后面的元素都是负的,那么这些负值当中的最大值才有可能成为最大子数组和的最终答案。

因此,我们从第一个数开始,统计与后面数值进行累加的结果。假设当前子数组和为curr,下一个数是nums[i],如果curr + nums[i] < nums[i],就说明curr当中已经累加了很多负值,curr + nums[i]的值不比nums[i]更大,显然nums[i]本身更有可能成为最终答案,此时令curr = nums[i],开始重新统计。反之,如果curr + nums[i] >= nums[i],即之前的子数组和与当前数值相加不会减少子数组和,那么就将当前数值加入到子数组和当中。每次循环时,使用ans = max(ans, curr)统计一次可能的答案。

完整的 Swift 题解是:

swift 复制代码
class Solution {
    func maxSubArray(_ nums: [Int]) -> Int {
        var curr = nums[0], ans = nums[0]
        for i in 1..<nums.count {
            if curr + nums[i] < nums[i] {
                curr = nums[i]
            } else {
                curr += nums[i]
            }
            ans = max(ans, curr)
        }
        return ans
    }
}
相关推荐
sakiko_2 小时前
UIKit学习笔记4-使用UITableView制作滚动视图
笔记·学习·ios·swift·uikit
四眼蒙面侠18 小时前
深入 Open Agent SDK(番外篇):实战验证——把 SDK 塞进一个 macOS 原生 Agent 应用
swift·claudecode·bmad·agentsdk·openagentsdk
2501_915106322 天前
在Mac上搭建iOS开发环境的详细步骤与注意事项
ide·vscode·macos·ios·个人开发·swift·敏捷流程
harder3212 天前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
sakiko_2 天前
UIKit学习笔记2-组件嵌套、滚动视图等
笔记·学习·objective-c·swift·uikit
四眼蒙面侠2 天前
深入 Open Agent SDK(五):会话持久化与安全防线
swift·claudecode·bmad·openagentsdk
茶底世界之下3 天前
诡异!String 参数在闭包里变成了 <uninitialized>,我排查了整整两天
ios·xcode·swift
四眼蒙面侠3 天前
深入 Open Agent SDK(四):多 Agent 协作——子代理、团队与任务编排
swift·agentsdk·openagentsdk
东坡肘子4 天前
Swift 并发正被更广泛地接纳 -- 肘子的 Swift 周报 #133
人工智能·swiftui·swift
四眼蒙面侠5 天前
深入 Open Agent SDK(三):MCP 集成实战——让 Agent 连接万物
swift·agentsdk·openagentsdk