Distant Barcodes in Python


Suppose in a warehouse, there is a row of barcodes. The i-th barcode is barcodes[i]. We have to rearrange the barcodes so that no two adjacent barcodes are same. So if the input is [1,1,1,2,2,2] so output is [2,1,2,1,2,1].

To solve this, we will follow these steps −

  • make one map named d
  • store the frequency of numbers present in the barcode array into d
  • x := empty list
  • insert all key-value pairs into x
  • i := 0
  • res := make a list whose length is same as barcodes, and fill [0]
  • sort x based on the frequency
  • while i < length of result
    • result[i] := element of the last entry of x
    • decrease the frequency value of the last entry of x
    • if the frequency of the last element of x is 0, then delete that entry from x
    • increase i by 2
  • i := 1
  • while i < length of result
    • result[i] := element of the last entry of x
    • decrease the frequency value of the last entry of x
    • if the frequency of the last element of x is 0, then delete that entry from x
    • increase i by 2
  • return result

Let us see the following implementation to get better understanding −

Example

 Live Demo

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]))

Input

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

Output

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

Updated on: 30-Apr-2020

99 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements