สมมุติว่าในโกดังมีบาร์โค้ดอยู่แถวหนึ่ง บาร์โค้ดที่ i คือบาร์โค้ด[i] เราต้องจัดเรียงบาร์โค้ดใหม่เพื่อไม่ให้บาร์โค้ดที่อยู่ติดกันสองอันเหมือนกัน ดังนั้นหากอินพุตเป็น [1,1,1,2,2,2] เอาต์พุตจะเป็น [2,1,2,1,2,1]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สร้างแผนที่หนึ่งชื่อ d
- เก็บความถี่ของตัวเลขที่อยู่ในอาร์เรย์บาร์โค้ดลงใน d
- x :=รายการว่าง
- แทรกคู่คีย์-ค่าทั้งหมดลงใน x
- ผม :=0
- res :=ทำรายการความยาวเท่ากับบาร์โค้ด แล้วกรอก [0]
- จัดเรียง x ตามความถี่
- ในขณะที่ฉัน <ความยาวของผลลัพธ์
- ผลลัพธ์[i] :=องค์ประกอบของรายการสุดท้ายของ x
- ลดค่าความถี่ของรายการสุดท้ายของ x
- ถ้าความถี่ขององค์ประกอบสุดท้ายของ x เป็น 0 ให้ลบรายการนั้นออกจาก x
- เพิ่ม i ขึ้น 2
- ผม :=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]