算法面试题整理
2021-04-26 07:29
标签:nbsp name code max raise span end div __init__ 1、python反转字符串 注:栈后进先出,列表先进先出, 使用两个栈模拟列队列未被插入元素和删除队列头 1、实现方法 1)使用stack1模拟队列尾部追加元素 1. 只要追加元素直接加入stack1这个栈即可 2)使用stack2模拟删除队首元素 1. 当第一次删除时,stack2肯定为空,那么将stack1中元素依次出栈,加入stack2中 2. 那么stack2中栈顶元素即是stack1中以前的栈底元素(队列头),stack1为空 3. 当第二次删除时首先会判断stack2是否为空,如果不为空,直接删除stack2的栈顶元素即为队列头部元素 4. 如果stack2为空,再次将stack1中元素依次加入stack2中 3.使用yield生成器生成斐波拉契函数 算法面试题整理 标签:nbsp name code max raise span end div __init__ 原文地址:https://www.cnblogs.com/guohad/p/13253446.html‘‘‘第一种:使用字符串切片‘‘‘
s = ‘Hello World‘
print(s[::-1]) # dlroW olleH
‘‘‘第二种:使用列表的reverse方法‘‘‘
l = list(s)
l.reverse()
print( "".join(l) ) # dlroW olleH
‘‘‘第三种:使用reduce‘‘‘
from functools import reduce
result = reduce(lambda x,y:y+x,s)
print( result ) # dlroW olleH
2. 用两个栈实现一个队列
def __init__(self):
self.stack1 = []
self.stack2 = []
def append_tail(self, elem):
self.stack1.append(elem)
def delete_head(self):
if not self.stack2: # 如果stack2为空就将stack1中的元素依次如stack2的栈,stack2就可以模拟这个列表了
if self.stack1:
while self.stack1:
elem = self.stack1.pop()
self.stack2.append(elem)
else:
raise Exception("Queue is empty.")
elem = self.stack2.pop() # 只要stack2不为空,stack2栈顶元素即是队首元素
return elem
if __name__ == ‘__main__‘:
que = CQueue()
que.append_tail(1)
que.append_tail(2)
que.append_tail(3)
print que.delete_head() # 1
que.append_tail(4)
‘‘‘模拟 1 2 3 加入对了,然后3出对了,然后4加入队列过程‘‘‘
# 第一步:1 2 3 加入队列
‘‘‘
stack1 = [1,2,3]
‘‘‘
# 第二步:删除队列头部元素
‘‘‘
1) 将stack1中元素依次出栈放入stack2中
stack1 = []
stack2 = [3,2,1]
删除队列首部元素即删除stack2栈顶元素: stack2 = [3,2]
‘‘‘
# 第三步:将4加入队列
‘‘‘
stack1 = [4]
stack2 = [3,2]
# 如果再次删除队列头部,就直接删除stack2栈顶元素,直到stack2为空,再次将stack1中元素出栈放入stack2即可
‘‘‘
def fib(max_num):
a,b = 1,1
while a
‘‘‘模拟 1 2 3 加入对了,然后3出对了,然后4加入队列过程‘‘‘
# 第一步:1 2 3 加入队列
‘‘‘
stack1 = [1,2,3]
‘‘‘
# 第二步:删除队列头部元素
‘‘‘
1) 将stack1中元素依次出栈放入stack2中
stack1 = []
stack2 = [3,2,1]
删除队列首部元素即删除stack2栈顶元素: stack2 = [3,2]
‘‘‘
# 第三步:将4加入队列
‘‘‘
stack1 = [4]
stack2 = [3,2]
# 如果再次删除队列头部,就直接删除stack2栈顶元素,直到stack2为空,再次将stack1中元素出栈放入stack2即可
‘‘‘
上一篇:UnityShader——置灰
下一篇:树状数组的操作