我有一个代码,我想知道如何加快速度,简化(让它更漂亮:)),让它吃更少的内存,一般来说,有可能做到这一点吗?
目前我有以下结果:时间 - 91 ms | 内存 - 3.98Mb | Python 3.7.3
Gosha 实现了 Dec 数据结构,其最大大小由给定的数字确定。方法push_back(x), push_front(x), pop_back(),pop_front()工作正常。但是,如果套牌中有很多元素,则该程序可以运行很长时间。事实是并非所有操作都在 O(1) 中执行。帮助天哪!编写一个有效的实现。
注意:实现不能使用链表。
输入格式
第一行包含命令数 n — 一个不超过 5000 的整数。第二行包含一个数字m— 最大牌组大小。它不超过 1000。接下来的 n 行包含以下命令之一:
push_back(value)– 在双端队列的末尾添加一个元素。如果双端队列已经包含最大数量的元素,则打印“错误”。
push_front(value)– 在双端队列的开头添加一个元素。如果双端队列已经包含最大数量的元素,则打印“错误”。
pop_front()– 显示双端队列的第一个元素并将其删除。如果双端队列为空,则打印“错误”。
pop_back()– 显示双端队列的最后一个元素并将其删除。如果双端队列为空,则打印“错误”。
Value— 整数,模不超过 1000。输出格式
在单独的行上打印每个命令的结果。对于成功的请求push_back(x),push_front(x)您不需要显示任何内容。
输出格式
在单独的行上打印每个命令的结果。对于成功的请求push_back(x),push_front(x)您不需要显示任何内容。
示例 1:
输入:
4
4
push_front 861
push_front -819
pop_back
pop_back
结论:
861
-819
示例 2:
输入:
7
10
push_front -855
push_front 720
pop_back
pop_back
push_back 844
pop_back
push_back 823
结论:
-855
720
844
示例 3:
输入:
6
6
push_front -201
push_back 959
push_back 102
push_front 20
pop_front
pop_back
结论:
20
102
我的代码:
class Dek:
def __init__(self, max_size: int):
self._elements = [None] * max_size
self._max_size = max_size
self._head = 0
self._tail = 0
self._size = 0
def is_empty(self):
return self._size == 0
def push_back(self, value: int):
if self._size != self._max_size:
self._elements[self._tail] = value
self._tail = (self._tail + 1) % self._max_size
self._size += 1
else:
raise OverflowError
def push_front(self, value: int):
if self._size != self._max_size:
self._elements[self._head - 1] = value
self._head = (self._head - 1) % self._max_size
self._size += 1
else:
raise OverflowError
def pop_back(self):
if self.is_empty():
raise IndexError
x = self._elements[self._tail - 1]
self._elements[self._tail - 1] = None
self._tail = (self._tail - 1) % self._max_size
self._size -= 1
return x
def pop_front(self):
if self.is_empty():
raise IndexError
x = self._elements[self._head]
self._elements[self._head] = None
self._head = (self._head + 1) % self._max_size
self._size -= 1
return x
def main():
count_command = int(input())
queue_size = int(input())
queue = Dek(queue_size)
commands = {
'push_front': queue.push_front,
'push_back': queue.push_back,
'pop_front': queue.pop_front,
'pop_back': queue.pop_back,
}
for i in range(count_command):
command = input()
operation, *value = command.split()
if value:
try:
result = commands[operation](int(*value))
if result is not None:
print(result)
except OverflowError:
print('error')
else:
try:
result = commands[operation]()
print(result)
except IndexError:
print('error')
if __name__ == '__main__':
main()
你的代码很好。它满足任务的所有要求,我没有看到任何简单的方法来提高性能或减少所需的内存。它可以写得更短,但同时它的工作时间会更长。函数
main可以用更简单的方式编写,但赋值更多的是关于类Dek。看看下面的选项,但是,再一次,它并不比你的更好,也不比你的差: