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