একটি ওয়্যারহাউসে বারকোডের একটি সারি আছে। i-তম বারকোড হলো barcodes[i]। বারকোডগুলো এভাবে সাজাতে হবে যাতে দুটি আডজাসেন্ট বারকোড একই না হয়।
ইনপুট [1,1,1,2,2,2] হলে আউটপুট [2,1,2,1,2,1]।
সমাধানের ধাপসমূহ
- d নামে একটি ম্যাপ বানান
- barcodes অ্যারেতে থাকা সংখ্যাগুলোর ফ্রিকোয়েন্সি d-তে স্টোর করুন
- x := খালি লিস্ট, সব কী-ভ্যালু পেয়ার x-তে ইনসার্ট করুন
- i := 0, result := barcodes দৈর্ঘ্যের লিস্ট 0 দিয়ে ফিল করুন
- x কে ফ্রিকোয়েন্সি অনুযায়ী সর্ট করুন
- যখন i < len(result):
- result[i] := x-র শেষ এন্ট্রির এলিমেন্ট
- শেষ এন্ট্রির ফ্রিকোয়েন্সি কমান
- যদি ফ্রিকোয়েন্সি ০ হয়, তবে সেটি x-র থেকে ডিলিট
- i += 2
- i := 1, আবার i < len(result) পর্যন্ত উপরের প্রসেস রিপিট
- result রিটার্ন
উদাহরণ
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]