当前位置: 首页 > 面试题库 >

迅速的总和

谷梁裕
2023-03-14
问题内容

我想要一个runningSum数字数组上的函数(或任何可加的事物的有序集合),该函数返回长度相同的数组,其中每个元素i是A中所有元素的总和,
直到一个includei

例子:

runningSum([1,1,1,1,1,1]) -> [1,2,3,4,5,6]
runningSum([2,2,2,2,2,2]) -> [2,4,6,8,10,12]
runningSum([1,0,1,0,1,0]) -> [1,1,2,2,3,3]
runningSum([0,1,0,1,0,1]) -> [0,1,1,2,2,3]

我可以使用for循环或其他方式html" target="_blank">执行此操作。还有更多功能选择吗?它有点像reduce,只是它会构建一个包含所有中间值的结果数组。

更通用的是具有可以接受任何序列并提供输入序列的总运行时间的函数。


问题答案:

您正在寻找的通用组合器通常称为scan,可以按照以下方式进行定义(就像列表中的所有高阶函数一样)reduce

extension Array {
    func scan<T>(initial: T, _ f: (T, Element) -> T) -> [T] {
        return self.reduce([initial], combine: { (listSoFar: [T], next: Element) -> [T] in
            // because we seeded it with a non-empty
            // list, it's easy to prove inductively
            // that this unwrapping can't fail
            let lastElement = listSoFar.last!
            return listSoFar + [f(lastElement, next)]
        })
    }
}

(但是我建议这不是一个很好的实现。)

这是一个非常有用的常规函数​​,但遗憾的是它没有包含在标准库中。

然后,您可以通过专门设置起始值和操作来生成累积和:

let cumSum = els.scan(0, +)

您可以简单地省略零长度的情况:

let cumSumTail = els.scan(0, +).dropFirst()


 类似资料:
  • 问题内容: 迅速有没有通过声明?例如,如果我执行以下操作 案例“一”和案例“二”是否可以执行相同的代码? 问题答案: 是。您可以按照以下方式进行操作: 另外,您可以使用关键字:

  • 问题内容: 所以我有这样的prepareForSegue方法: 但是,在运行时,应用程序崩溃并记录了以下消息: 无法转换类型为’UINavigationController’的值 出现错误是因为addEventController嵌入在导航控制器中,但是我不确定如何设置segue,以便将destinationViewController设置为NavigationController,但还允许我将p

  • 问题内容: 如何迅速地建立代表? 问题答案: 它与obj-c没什么不同。首先,您必须在类声明中指定协议,如下所示: 该实现将如下所示: 当然,您必须设置委托。例如:

  • 问题内容: 我已经设置了swift项目来使用sqlite。有时,插入时实际上并没有插入正确(或全部)的值。我知道,因为我重新启动了该应用程序,并且当我再次输入时,输入是随机错误(未插入内容)或为零。但有时是正确的。 这是我设置的位置,是的,插入之前数据正确。 您可以在中间看到注释掉的println,如果没有注释掉,则itemName有时会成为该字符串的一部分。 问题答案: 我有同样的问题。我找到了

  • 问题内容: 如何在带有LLDB的Swift App中绘制变量的值? 早先就像 现在,我通常会遇到一些讨厌的错误,例如: 问题答案: 该错误听起来像是因为DWARF没有告诉LLDB在哪里可以找到“自我”对象。鉴于Swift的本质,LLDB需要知道self的类型,以便能够在本地范围内注入表达式。找出这是否是您的问题的一种方法是在LLDB提示符下执行: (lldb)框架变量-L self 您可能会看不到

  • 问题内容: 我希望有人可以帮助我。我试图允许用户捏UIImageView(允许最大和最小级别)上的缩放。但是由于某种原因,它无法正常工作。图像会稍微放大,然后反弹。谢谢。 这是变焦功能 问题答案: 我决定将imageView添加到UIScrollView中。它允许用户缩放和平移。这是我使用的代码。 为了设置最大/最小缩放,我使用了: 这是其余的代码。 我也必须添加它 Swift 3及以上功能原型