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