阵列简介
阵列是一个连续的内存块,也是到目前为止已知的最简单的数据结构。它通常用于表示序列。
示例:
给定一个数组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
问题:
- 您有一系列整数
- 您必须重新排序条目,以便首先出现条目
- 您必须在不添加其他空间的情况下解决此问题
如果不是最后一个选项,我们只需执行以下操作:
- 将阵列分为两个子阵列,称为
left
和right
- 编写一个
for
循环,该循环遍历数组,带有一个参数,很可能是i
- 在
for
循环内,我们编写一个条件以检查元素(或数字是否必须)是2的模量,即剩余的是0 - 如果是,我们将数字添加到数组(如何?将偶数数字添加到
left
子阵列) - 如果不是2的模量,即,剩余的1+,请附加到
right
sub阵列
- 在
- 返回合并两个子阵列的值。
时间复杂性可能是O(n),其中有序言,但指令不希望您分配任何空间。
如果您要按照说明使空间复杂性成为O(1),则需要第三个子阵列。第三个子阵列将是您要排序的原始数组。因此,从您原始思考过程的某个点开始:
- 第三个子阵列(让我们称其为
original
)是迭代的 - 从您检查均匀值和奇数值的点,请将
original
的值交换为left
或right
子阵列。这扩展了两个子阵列,并缩小了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
是阵列的长度。
要关闭此条目,我将放弃一些我阅读的提示;
- 舒适地编写使用子阵列的代码
- 操作数组时,请不要忘记索引从0 开始
- 操作2D数组时,使用并行逻辑对行和列
- 不必担心数组的顺序,即它们必须是平等的,或者查看上面的问题语句的注释
对于更多的数组问题,方法和解决方案,我正在为此建立一种库存,其中包含leetcode问题和解决方案(基本上是面试问题)。无论如何,直到下一次。