查找Array中开始/结束索引的所有可能排列

时间:2017-02-22 03:40:06

标签: arrays swift algorithm

我试图编写一个方法来返回可以通过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)

感谢您的阅读。我欢迎你的建议。

1 个答案:

答案 0 :(得分:1)

如果我理解你的目标,你需要两个循环。将while循环以及beginend变量替换为:

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
    }
}