目录
- 规划
- 实现
- 初始化
- 插入
- 删除
- 查找
- AI插件
- 单测
- 注释
- 调优建议
- 小结
规划
先想清楚都写哪些,然后再动手操作
用Python写了一个简单数组类,首先思考下都写哪些功能:
- 插入
- 删除
- 查找
- 用插件做单元测试和写注释
目的只是实现一个简单的数组类,了解数组的基础功能,基本结构;重点是去分析插入,删除的时间复杂度。
实现
实现细节一点一点拆解
初始化
先写一个类,然后实现初始化的操作;代码如下:
class Array:
def __init__(self, capacity: int):
self._n = capacity
self._count = 0
self._data = [0 for i in range(capacity)]
插入
接着写插入的代码,如下:
def insert(self, index: int, value: int) -> bool:
if self._count == self._n:
print("没有可插入的位置")
return False
if index < 0 or index > self._count:
print("位置不合法")
return False
for i in range(self._n, index, -1):
self._data[i - 1] = self._data[i - 2]
self._data[index] = value
self._count += 1
return True
以上是插入的代码,只是一个简单的插入操作。接下来看下这个操作的效率,最好的情况是index值跟n值差1,最坏的情况O(n),平均是O(n),所以这个插入的时间复杂度也为O(1)
删除
接下来看下删除的代码,如下:
def delete(self, index: int) -> bool:
if index < 0 or index >= self._count:
return False
for i in range(index, self._n, -1):
self._data[i - 1] = self._data[i]
self._count -= 1
return True
分析完插入,删除就容易理解了。看下操作数据的效率,最好情况是O(1),即删除末尾元素;最坏的情况是O(n),需要遍历n个元素;平均是O(n)。删除的操作时间复杂度O(n)。
查找
直接上代码,如下:
def find(self, index: int) -> int:
if index < 0 or index >= self._count:
return -1
return self._data[index]
这个就很直接了。效率很高,因为数组支持随机访问。
AI插件
这个插件是Baidu Comate智能代码助手。我用的pycharm,可以去File->Settings->plugins,搜索Baidu Comate即可找到。如下图:
关闭后的位置,如下图:
点开如下,
有2个功能,单测,注释。我主要用了这2个。
单测
选中一个函数,我这选的是insert,然后点击
,右边就生成了单测,如下图:
这个功能效果挺好的,值得推荐下。
注释
接下来使用下注释功能,
点击这个,然后右边就有了注释的内容,如下图:
点击,我觉得写的挺好的,然后点击采纳;出现了如下图:
注释就写完了。
调优建议
这个功能怎么说呢?我也是体验了一下,才发现的。其实,这个功能的设计应该是挺好的,我这测试了下我的代码,还好。展示下怎么使用。在编辑器中选中一段代码,如下图:
然后,在右下角输入框输入"/调优建议",如下图:
,
给大家看下我的代码的分析结果。如下图:
代码问题写了一大堆,看下它给出的代码,如下图:
看下,好像跟我写的还是一样的。嘿嘿嘿
小结
数组的逻辑+单元测试+注释
挺好的一个内容。先说下数组吧,其实,数组类主要的就是插入和删除操作,这2个时间复杂度都是O(n)的,这个很重要;查找的话,就是根据下标去查找数组的值,这个就是O(1)的时间复杂度。无论是std::vector,还是UE的TArray,或者是其他的实现,时间复杂度都一样的。然后分享下这个插件的使用,其实插件的功能远不止于此,只是我觉得这2个功能对我来说是最好用的,所以分享下,希望看到的人能喜欢。可以去官网链接下载体验下。