Arrays 查找数组中开始/结束索引的所有可能排列
我试图编写一个方法,返回Swift中子数组元素可以获得的最大值 我在创建一个算法时遇到的问题是,该算法捕获通过Arrays 查找数组中开始/结束索引的所有可能排列,arrays,swift,algorithm,Arrays,Swift,Algorithm,我试图编写一个方法,返回Swift中子数组元素可以获得的最大值 我在创建一个算法时遇到的问题是,该算法捕获通过sliceSum方法运行的ArraySlices的开始和结束索引的所有可能排列 func maxSubArray(_ nums: [Int]) -> Int { var output = 0 func sliceSum(slice: ArraySlice<Int>) -> Int { // throws out cases tha
sliceSum
方法运行的ArraySlice
s的开始和结束索引的所有可能排列
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
}
我知道解决办法很简单,但我想不出来。我欢迎以下建议:如何通过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
}
谢谢你的阅读。我欢迎你的建议。如果我理解你的目标,你需要两个循环。将
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
}
}
}
非常感谢你!这解决了202个测试用例中的198个。看起来这是一个最适合卡丹算法的工作,我刚刚了解了这个算法。一旦我弄明白如何用Swift写这篇文章,我会发布一个更新。
func sliceSum(slice: ArraySlice<Int>) -> Int {
if slice.count > 0 {
return slice.reduce(0, +)
} else {
return 0
}
}