指数超出范围 - 斯威夫特

时间:2017-10-12 17:45:15

标签: arrays swift

    var truthArray = [Bool]()
func isStrictlyIncreasing(sameSequence: [Int]) {
    var truthArray = [Bool]()
    for i in 0 ... sameSequence.count-1{
        if sameSequence[i]<sameSequence[i+1] {
            truthArray.append(true)
        }
        else {
            truthArray.append(false)
        }
    }
}

func almostIncreasingSequence(sequence: [Int]) -> Bool {
    for i in 0 ... sequence.count-1 {
        var sameSequence = sequence
        let number = sequence[i]
        sameSequence.remove(at: i)
        isStrictlyIncreasing(sameSequence: sameSequence)
        sameSequence.insert(number, at: i)
    }
    if truthArray.contains(true) {
        return true
    }
    else {
        return false
    }
}

在CodeFights上的这个特定代码挑战中,系统会要求您确定是否可以删除数组中的某个数字以保留严格增加的序列。

我试图清除此错误的事情是从1开始切换索引并重新调整代码,减少并将索引边界增加1,这可能是我第三次重写此代码。但由于我的知识受到严格限制,因此我无法通过我的解决方案获得创造力。

我现在遇到的问题是指数超出范围。我确切地知道这意味着什么,除了我不知道哪一行代码导致问题以及原因。我非常感谢提示,而不仅仅是一个直接的解决方案,因为我是初学者,这是一个很好的学习经历。

感谢任何和所有帮助!如果我可以添加更多细节这个问题,请不要犹豫告诉我! :)

1 个答案:

答案 0 :(得分:0)

if sameSequence[i]<sameSequence[i+1]中的

你将永远超出范围

如果sameSequence尺寸为10,则for将从i=0调用i=9(10次)。最后一次迭代将尝试访问sameSequence[10],你将有一个超出范围的异常。

您可以通过将循环更改为for i in 0..<sameSequence.count-1 { }来解决此问题,但请注意这可能会对您的算法和问题解决方案产生影响