ACE阵列的基础知识:逐步指南
#python #dsa #arrays

阵列简介

阵列是一个连续的内存块,也是到目前为止已知的最简单的数据结构。它通常用于表示序列。
示例
给定一个数组a [i],a [i]表示存储在数组中的(i + 1)对象。
借助您典型的数组使用,时间复杂性用于检索和更新数组的数据需要O(1)时间。

数组动作

在这里,我们将查看时间复杂性插入和删除数组元素的元素,希望解释将足够清楚,任何人都可以理解。
同样在将来,涵盖数组的其他方面,例如修改/更改数组中的元素。但是现在,我们将坚持基础知识。

在数组中插入元素

可以通过调整大小的大小来处理新数据/元素将新数组的插入到完整的数组中,即分配带有附加内存的新数组,并在原始数组中复制条目会增加插入的最差时间。


但是,如果新数组的恒定因子大于原始数组,则插入的平均时间复杂性是恒定的O(1),因为调整大小很少。

删除数组中的元素

从数组中删除元素涉及将所有连续元素移到左侧,以填充数组中已删除/删除元素左侧的空间。
时间复杂性 i 上删除/删除元素从长度 n 的数组中删除元素。当一个人使用相同的原理将新元素插入数组中时,也适用同样。
示例
如果我们有一个元素的数组/列表{1、2、3、4、5、6、7},并且我们希望在索引3处删除该元素,以及熟悉Cobol,Fortran或熟悉语言的人尴尬(不是那个尴尬),他们期望被切断的价值是3数组(我们称之为a)a [4]是存储在数组中的(i + 1)对象,其中i是数组的索引。
如果您使用的语言遵循此原则,您可能会有一个扎实的论点,但是我不会沉迷于您,将其带到堆栈溢出过度狂热的巫师中!

问题)

此问题语句使我们有一个洞察力的洞察力(如果您使用的是Python),但是为了避免我的零件混乱,阵列/列表是数组,除非另​​有说明。

对于这个问题,它们将在无序的列表中进行结构。当然,对于某些Leetcode勇士来说,看起来很奇怪,但是对我们的规范来说,应该使所有要求更容易理解每​​个要求,白板并在必要时解释复杂的部分,这会导致您考虑一个好的解决方案或向面试官询问正确的问题(s)对于可能导致潜在答案的提示。

问题01

问题

  • 您有一系列整数
  • 您必须重新排序条目,以便首先出现条目
  • 您必须在不添加其他空间的情况下解决此问题

如果不是最后一个选项,我们只需执行以下操作:

  • 将阵列分为两个子阵列,称为leftright
  • 编写一个for循环,该循环遍历数组,带有一个参数,很可能是i
    • for循环内,我们编写一个条件以检查元素(或数字是否必须)是2的模量,即剩余的是0
    • 如果是,我们将数字添加到数组(如何?将偶数数字添加到left子阵列)
    • 如果不是2的模量,即,剩余的1+,请附加到right sub阵列
  • 返回合并两个子阵列的值。

时间复杂性可能是O(n),其中有序言,但指令不希望您分配任何空间。

如果您要按照说明使空间复杂性成为O(1),则需要第三个子阵列。第三个子阵列将是您要排序的原始数组。因此,从您原始思考过程的某个点开始:

  • 第三个子阵列(让我们称其为original)是迭代的​​
  • 从您检查均匀值和奇数值的点,请将original的值交换为leftright子阵列。这扩展了两个子阵列,并缩小了original阵列。没有为新阵列创建的其他空间,只是发生了一些互换。 arrayBasic01.py
#!/usr/bin/env python3
"""O(n) space array i.e. allocated space to the array"""
def even_left(arr):
    left = 0
    right = len(arr) - 1

    while left < right:
        if arr[left] % 2 == 0:
            left += 1
        else:
            arr[left], arr[right] = arr[right], arr[left]
            right -= 1
    return arr

000-testArray.py

#!/usr/bin/env python3
from arrayBasic01 import even_left

arr = [1, 2, 3, 4, 5, 6, 7, 8]

print(even_left(arr))

上面的代码将输出[8, 2, 6, 4, 5, 7, 3, 1]
注意:如果您有OCD(随意修改)或认为这是错误的,请根据Chatgpt上的100%停止。尽管您想知道,但它的解决方案还是导致了该输出的,尽管它试图强制其“正确”答案(其输出为[2、4、6、8、1、5、7、9]。

)。

这是怎么回事

是什么使空间复杂性成为o(1)(Chatgpt坚决地说,尽管有O(1)空间给我答案,这是不可能的,是否有一个变量可以持有索引(索引),以及用于执行掉期的临时变量。
对于时间复杂性分析,由于每个条目对子阵列进行了恒定的过程,因此是O(n),其中n是阵列的长度。

要关闭此条目,我将放弃一些我阅读的提示;

  1. 舒适地编写使用子阵列的代码
  2. 操作数组时,请不要忘记索引从0
  3. 开始
  4. 操作2D数组时,使用并行逻辑对行和列
  5. 不必担心数组的顺序,即它们必须是平等的,或者查看上面的问题语句的注释

对于更多的数组问题,方法和解决方案,我正在为此建立一种库存,其中包含leetcode问题和解决方案(基本上是面试问题)。无论如何,直到下一次。