【问题标题】:What is the time complexity to get the last index for an array? [duplicate]获取数组的最后一个索引的时间复杂度是多少? [复制]
【发布时间】:2019-06-23 06:07:10
【问题描述】:
array = ["A", "B", "C", "D"]

对于给定的数组,O(1) 指向第一个索引 0。因此,如果我键入 array[0],则需要 O(1) 指向 "A"。但是,如果我写 array[-1] 指向最后一个索引 3。它是否遍历整个数组以获取最后一个索引,或者它知道数组默认以索引 3 结束? 也就是说array[-1]在python中是如何实现的?

【问题讨论】:

  • 那不是数组,是列表。
  • 阅读this

标签: python python-3.x python-2.7


【解决方案1】:

访问任何数组元素都是在恒定时间内进行的,因为它是由内存位置(即指针)已知的。

数组不需要通过前面的元素来访问第n个元素(即它不像链表。)所有元素的位置都是事先知道的,可以直接访问。

感谢 cmets 更新。

array[-x]array[len(lst) - x] 的语法糖。所以它仍然是一个简单的对指针的常量访问并且不需要时间。

You can see this answer for a bit more info. While it is about C, the concepts should be the same.

【讨论】:

  • lst[-x]lst[len(lst) - x] 的语法糖
  • 谢谢。这有很大帮助。我也不知道len() 需要 O(1)
  • @ananya:如果您了解 C++,您可以认为 Python 的 list 等同于 std::vector,或者对于 Java,等同于 ArrayList。它只是动态大小数组的 Python 名称。尽管有这个名字,但它不是一个链表。
【解决方案2】:

原生 Python 列表是指针数组,访问任何元素都是 O(1)。

请注意,这是特定于标准 Python 实现(称为 CPython)的实现细节。其他语言实现可能会以不同的方式实现列表。

【讨论】:

  • 感谢您的回复。我同意。访问任何元素都需要 O(1)。但是当我想访问最后一个元素时,它如何直接访问最后一个元素?指针不是必须遍历整个数组才能知道这是最后一个元素吗?
  • 列表知道它的长度,因此通过负索引访问项目是微不足道的。
猜你喜欢
  • 2018-09-11
  • 2016-05-21
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2022-01-21
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多