【发布时间】:2022-01-25 15:37:43
【问题描述】:
假设您有两个队列,并且一次只能将一个条目从队列的头部移动到任一队列的尾部。设计一种算法,用于反转其中一个队列中的两个相邻条目。
【问题讨论】:
-
到目前为止你尝试了什么?出了什么问题?
-
这类似于分流问题。
-
你知道这两个队列的大小吗?
假设您有两个队列,并且一次只能将一个条目从队列的头部移动到任一队列的尾部。设计一种算法,用于反转其中一个队列中的两个相邻条目。
【问题讨论】:
q1 = [1,2,3,4,5]
q2 = []
reverse 3,4
q1 = [2,3,4,5,1]
q2 = []
q1 = [3,4,5,1,2]
q2 = []
q1 = [4,5,1,2]
q2 = [3]
q1 = [5,1,2,4]
q2 = [3]
q1 = [5,1,2,4,3]
q2 = []
q1 = [1,2,4,3,5]
q2 = []
这基本上就是算法。旋转要反转元素的队列。当两者中的第一个元素可以出队时,将其取出并将其入队到另一个队列中。入队和出队下一个元素并放回第一个元素。如果填充了q2,则需要将其旋转一次,直到可以将元素从q1 中取出。这不会改变q2 的状态。
时间复杂度:O(n + m) 其中n 和m 是q1 和q2 中元素的数量。
空间复杂度:O(1)
【讨论】: