[Swift]LeetCode918. 环形子数组的最大和 | Maximum Sum Circular Subarray

[Swift]LeetCode918. 环形子数组的最大和 | Maximum Sum Circular Subarray,第1张

概述Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty subarray of C. Here, a circular array means the end of the array connects to the beginning of the ar

Given a circular array C of integers represented by A,find the maximum possible sum of a non-empty subarray of C.

Here,a circular array means the end of the array connects to the beginning of the array.  (Formally, C[i] = A[i]when 0 <= i < A.length,and C[i+A.length] = C[i] when i >= 0.)

Also,a subarray may only include each element of the fixed buffer A at most once.  (Formally,for a subarray C[i],C[i+1],...,C[j],there does not exist i <= k1,k2 <= j with k1 % A.length = k2 % A.length.)

 

Example 1:

input: [1,-2,3,-2]Output: 3 Explanation: Subarray [3] has maximum sum 3 

Example 2:

input: [5,-3,5]Output: 10 Explanation: Subarray [5,5] has maximum sum 5 + 5 = 10 

Example 3:

input: [3,-1,2,-1]Output: 4 Explanation: Subarray [2,3] has maximum sum 2 + (-1) + 3 = 4 

Example 4:

input: [3,-3]Output: 3 Explanation: Subarray [3] and [3,2] both have maximum sum 3 

Example 5:

input: [-2,-1]Output: -1 Explanation: Subarray [-1] has maximum sum -1 

 

Note:

-30000 <= A[i] <= 30000 1 <= A.length <= 30000

给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。

在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],而当 i >= 0 时 C[i+A.length] = C[i]

此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i],C[j],不存在 i <= k1,k2 <= j 其中 k1 % A.length = k2 % A.length

 

示例 1:

输入:[1,-2]输出:3解释:从子数组 [3] 得到最大和 3

示例 2:

输入:[5,5]输出:10解释:从子数组 [5,5] 得到最大和 5 + 5 = 10

示例 3:

输入:[3,-1]输出:4解释:从子数组 [2,3] 得到最大和 2 + (-1) + 3 = 4

示例 4:

输入:[3,-3]输出:3解释:从子数组 [3] 和 [3,2] 都可以得到最大和 3

示例 5:

输入:[-2,-1]输出:-1解释:从子数组 [-1] 得到最大和 -1

 

提示:

-30000 <= A[i] <= 30000 1 <= A.length <= 30000

 

96 ms

 1 class Solution { 2     func maxSubarraySumCircular(_ A: [Int]) -> Int { 3         if A == nil || A.count == 0 {return 0} 4         var preSumMin:Int = 0 5         var preSumMax:Int = 0 6         var preSum = 0 7         var sumMin = Int.max 8         var sumMax = Int.min 9         let count = A.count10         for i in 0..<count11         {12             preSum += A[i]13             sumMax = max(preSum - preSumMin,sumMax)14             if i != (count - 1)15             {16                 sumMin = min(preSum - preSumMax,sumMin)17             }18             preSumMin = min(preSumMin,preSum)19             preSumMax = max(preSumMax,preSum)20         }21         return max(sumMax,preSum - sumMin)22     }23 }
总结

以上是内存溢出为你收集整理的[Swift]LeetCode918. 环形子数组的最大和 | Maximum Sum Circular Subarray全部内容,希望文章能够帮你解决[Swift]LeetCode918. 环形子数组的最大和 | Maximum Sum Circular Subarray所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1023463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存