当前位置: 首页 > 知识库问答 >
问题:

Swift数组反向()函数O(1)复杂度?

能旭
2023-03-14
let numbers = [3, 5, 7]
let reversedNumbers = Array(numbers.reversed())
print(reversedNumbers)
// Prints "[7, 5, 3]"

下面是链接:array reversed()

在讨论部分的最后,它说复杂性O(1),我相信这是关于时间复杂性的,如何反转一个数组需要O(1)时间?

共有1个答案

皇甫宇定
2023-03-14

实际上reversed()返回一个带有包装器的对象,而不是内容的实际反演,因此O(1)

如果检查reversed()调用的返回类型,它是reversedCollection,它在内部将原始集合保留为_base,除非它的内容被修改。基本上,ReversedCollection只是以相反的方式呈现/返回其基集合的元素,以节省时间和内存。

下面的示例显示,反向数组与原始数组保持相同,除非对其进行修改:

var originalArray = [1, 2, 3]
var reversedArray = originalArray.reversed()

print("0th index of OriginalArray \(originalArray[0])")
print("0th index of ReversedBaseArray \(reversedArray._base[0])")


print("0th index of OriginalArray \(originalArray.first)")
print("0th index of ReversedBaseArray \(reversedArray.first)")

originalArray[0] = 4 // Modification makes a separate copy of each instance
print("0th index of OriginalArray \(originalArray[1])")
print("0th index of ReversedBaseArray \(reversedArray._base[1])")


// Console Output:
// 0th index of OriginalArray 1
// 0th index of ReversedBaseArray 1


// First element of OriginalArray Optional(1)
// First element of ReversedBaseArray Optional(3)


// 0th index of OriginalArray 4
// 0th index of ReversedBaseArray 1
 类似资料:
  • 两个反向数组合并成一个排序数组的时间复杂度是多少? 是O(n)还是O(log n)?

  • 从本章开始,我们开始学习 Less 内置函数有关的知识,Less 中内置的函数可以帮助我们解决很多计算或者判断的问题。 对于函数的学习我建议可以现大致浏览一下有哪些函数以及他们对应的功能和用途。 等到我们用到的时候可以回过头来翻阅函数的参数以及详细的用法,具体使用的场景可以帮助我们快速理解函数的用途。 杂项函数简介 杂项函数主要用于处理图片路径、颜色等途径。 1.1 color 函数 函数用途:

  • 我写了一个函数来寻找目标值在给定数组中应该插入的位置。我们假设数组有不同的值,并按升序排序。我的解必须是O(log N)时间复杂度 此代码的复杂性是否为O(log N)?

  • 函数可以处理传递给它的参数,并且能返回它的退出状态码给脚本,以便后续处理。 function_name $arg1 $arg2 函数通过位置来引用传递过来的参数(就好像它们是位置参数),例如,$1, $2,等等。 例子 24-2. 带参数的函数 #!/bin/bash # 函数和参数 DEFAULT=default # 默认参数值。D func2 () {

  • 问题内容: 是否真的计算了PHP数组的所有元素,还是将此值缓存在某个地方并被获取? 问题答案: 好吧,我们可以看看源代码: call ,这反过来又需要非递归数组,该数组是通过以下方式实现的: 所以你可以看到,它的。

  • 问题内容: 我刚刚开始学习数据结构,并且在进行数组插入时想知道为什么数组插入的时间复杂度为O(n)而不是O(n + 1)? 在最佳情况下,当插入在最后时,时间复杂度为O(1)。我想我们正在考虑1插入元素,因为这里没有元素被移动。在最坏的情况下,假设我们必须移动n个元素然后插入新元素,那么时间时间复杂度是否应该为O(n + 1)?n用于移动元素,1用于插入。 非常感谢您的帮助。 问题答案: O(n)