Python中的远距离条形码

假设在仓库中有一排条形码。第i个条形码是条形码[i]。我们必须重新排列条形码,以便没有两个相邻的条形码相同。因此,如果输入为[1,1,1,2,2,2],则输出为[2,1,2,1,2,1]。

为了解决这个问题,我们将遵循以下步骤-

  • 制作一张名为d的映射

  • 将条形码阵列中存在的数字的频率存储到d中

  • x:=空列表

  • 将所有键值对插入x

  • i:= 0

  • res:=制作一个长度与条形码相同的列表,并填写[0]

  • 根据频率对x进行排序

  • 而我<结果的长度

    • result [i]:= x的最后一个条目的元素

    • 降低x的最后一个条目的频率值

    • 如果x的最后一个元素的频率为0,则从x删除该条目

    • 使我增加2

  • 我:= 1

  • 而我<结果的长度

    • result [i]:= x的最后一个条目的元素

    • 降低x的最后一个条目的频率值

    • 如果x的最后一个元素的频率为0,则从x删除该条目

    • 使我增加2

  • 返回结果

让我们看下面的实现以更好地理解-

示例

class Solution(object):
   def rearrangeBarcodes(self, barcodes):
      d = {}
      for i in barcodes:
         if i not in d:
            d[i] = 1
         else:
            d[i]+=1
      x = []
      for a,b in d.items():
         x.append([a,b])
      i = 0
      result = [0]*len(barcodes)
      x = sorted(x,key=lambda v:v[1])
      while i <len(result):
         result[i] = x[-1][0]
         x[-1][1]-=1
         if x[-1][1]==0:
            x.pop()
         i+=2
      i=1
      while i <len(result):
         result[i] = x[-1][0]
         x[-1][1]-=1
         if x[-1][1]==0:
            x.pop()
         i+=2
      return result
ob = Solution()print(ob.rearrangeBarcodes([1,1,1,2,2,2]))

输入项

[1,1,1,2,2,2]

输出结果

[2, 1, 2, 1, 2, 1]