今天晚上的程序题比较简单,是Hankranker上的算法题目
主要是让对于输入的一大串指令操作集合做处理
比如给你一系列的输入,这些输入都是对于一个列表的增删改查操作
最后让你遇到print语句就输出
程序很简单,但是从简单的做起,不能眼高手低
我的思考方法也不是一帆风顺的,刚开始我觉得按照一个for循环,每次循环体内直接在输入后就操作了,这是不对的,因为当在循环体内部输入一条指令的时候,我们要是提前操作了,在输出时序上可能会有偏差,比如前三条指令时增删改,第四条指令是输出,可是我们还要输入第五条指令的时候,程序就已经输出来了前四条指令的操作结果,这样如果操作数足够多的话怎么办?是不是就乱了?所以我的方法是先把所有的指令都放在一个指令操作列表中,然后等待所有的指令都放在了列表里面之后,再逐个执行,这样虽然使得空间的复杂度变大了,但是鲁棒性提高了。
本算法的时间复杂度为O(n)空间复杂度为O(n)
下面是我的代码;
#-*-Coding:UTF-8-*- #先将这n条指令放在一个指令列表里 # 然后依次执行,而不是进来一个执行一个 import os if __name__ == '__main__': N = int(input()) result = [] #result 是最后要求的目标列表 list = [] #list是存放指令的列表集 for i in range(N): list.append(input()) # print(list) for i in range(N): s = list[i].split(' ') judgement = s[0] if judgement == 'insert': pos, m = int(s[1]), int(s[2]) # print(m,pos) result.insert(pos, m) if judgement == 'print': print(result) if judgement == 'remove': m = int(s[1]) result.remove(m) if judgement == 'append': m = int(s[1]) result.append(m) if judgement == 'sort': result.sort() if judgement == 'pop': result.pop() if judgement == 'reverse': result.reverse()
运行结果如下:
D:\python3.6.4\python.exe "D:/python/python LeetCode 程序集/ListPrint.py"
insert 0 5
insert 1 10
insert 0 6
remove 6
append 9
append 1
sort
pop
reverse
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
Process finished with exit code 0