假设我们有一张卡片列表,并且我们希望以某种方式对卡片进行排序,以使它们以升序显示。如我们所知,卡是通过以下方式显示的:1.移除并显示最上面的卡,然后将下一张卡放到后面。2.重复步骤1,直到没有更多的卡片为止。我们必须找到卡片的顺序,以便它们以升序显示。
因此,如果输入就像纸牌= [1、2、3、4、5、6、7、8],那么输出将是[1、5、2、7、3、6、4、8],当移除1并将5移到后面时,当前情况为[2,7,3,6,6,4,8,5]。删除2并将7移至背面,当前情况[3、6、4、8、5、7] 3删除并将6移至背面,当前情况[4、8、5、7、6]删除图4并将8移到后面,当前情况[5、7、6、8] 5删除,将7移到后面,当前情况[6、8、7]。当前情况下,将6移开,将8移到后面[7,8]。7被删除,只有一张卡[8]。然后删除[8]
为了解决这个问题,我们将遵循以下步骤-
对列表卡进行排序
idx:=元素列表为0到卡片长度的列表
订单:=新列表
q:=队列并插入idx的元素
当q不为零时,
从q的左边删除元素并按顺序插入
如果q不为零,则
ans:=列出尺寸卡片,并用0填充
对于订单中的每个元素和卡片中的卡片,
ans [i]:=卡
返回ans
让我们看下面的实现以更好地理解-
from collections import deque class Solution: def solve(self, cards): cards.sort() idx=[i for i in range(len(cards))] order=[] q=deque(idx) while q: order.append(q.popleft()) if q: q.append(q.popleft()) ans=[0 for _ in cards] for i,card in zip(order,cards): ans[i]=card return ans ob = Solution()print(ob.solve([1, 2, 3, 4, 5, 6, 7, 8]))
[1, 2, 3, 4, 5, 6, 7, 8]
输出结果
[1, 5, 2, 7, 3, 6, 4, 8]