程序安排卡片,以便可以在Python中按升序显示卡片

假设我们有一张卡片列表,并且我们希望以某种方式对卡片进行排序,以使它们以升序显示。如我们所知,卡是通过以下方式显示的: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]
猜你喜欢