मान लीजिए एक गोदाम में बारकोड की एक पंक्ति है। i-वें बारकोड बारकोड है [i]। हमें बारकोड को पुनर्व्यवस्थित करना होगा ताकि कोई भी दो आसन्न बारकोड समान न हों। तो अगर इनपुट [1,1,1,2,2,2] है तो आउटपुट [2,1,2,1,2,1] है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- d नाम का एक नक्शा बनाएं
- बारकोड सरणी में मौजूद संख्याओं की आवृत्ति को d में संग्रहीत करें
- x :=खाली सूची
- सभी कुंजी-मान युग्मों को x में सम्मिलित करें
- मैं :=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]