我试图编写一个方法来返回可以通过Swift中的subArray元素获得的最大值。
我遇到的问题是创建一个算法,该算法捕获ArraySlice
方法的sliceSum
的开头和结尾的所有可能的排列。
我知道解决方案很简单,但我无法弄清楚。我欢迎建议:我如何通过sliceSum
方法实现运行所有可能排列的目标。
func maxSubArray(_ nums: [Int]) -> Int {
var output = 0
func sliceSum(slice: ArraySlice<Int>) -> Int {
// throws out cases that don't work
guard slice.count > 0 || slice.count != nums.count else { return 0 }
return slice.reduce(0, +)
}
var begin = 0
var end = nums.count - 1
while begin < end {
let frontSlice = nums[begin...end]
if sliceSum(slice: frontSlice) > output {
output = sliceSum(slice: frontSlice)
}
begin += 1
end -= 1
}
return output
}
鉴于以下内容,我应该返回6,这是以下数组中切片[4,-1,2,1]
的总和:
let array = [-2,1,-3,4,-1,2,1,-5,4]
maxSubArray(array)
感谢您的阅读。我欢迎你的建议。
答案 0 :(得分:1)
如果我理解你的目标,你需要两个循环。将while
循环以及begin
和end
变量替换为:
for begin in 0..<nums.count {
for end in begin..<nums.count {
let frontSlice = nums[begin...end]
let sum = sliceSum(slice: frontSlice)
if sum > output {
output = sum
}
}
}
我还要重做你的sliceSum
:
func sliceSum(slice: ArraySlice<Int>) -> Int {
if slice.count > 0 {
return slice.reduce(0, +)
} else {
return 0
}
}