สมมติว่าเรามีอาร์เรย์สองอาร์เรย์ arr1 และ arr2 องค์ประกอบของ arr2 มีลักษณะเฉพาะ และองค์ประกอบทั้งหมดใน arr2 ก็มีอยู่ใน arr1 ด้วย เราต้องจัดเรียงองค์ประกอบของ arr1 ในลักษณะที่การเรียงลำดับแบบสัมพัทธ์ของรายการใน arr1 เหมือนกับใน arr2 หากมีองค์ประกอบบางอย่างที่ไม่มีอยู่ใน arr2 ควรวางไว้ที่ส่วนท้ายของ arr1 โดยเรียงลำดับจากน้อยไปมาก ดังนั้นถ้า arr1 เป็นเหมือน [2,3,1,3,2,4,6,7,9,2,19] และ arr2 เป็นเหมือน [2,1,4,3,9,6] ก็จะได้ผลลัพธ์ จะเป็น [2,2,2,1,4,3,3,9,6,7,19]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สร้างแผนที่ชื่อ D และเก็บความถี่ขององค์ประกอบที่อยู่ใน arr1
- กำหนด res และ temp สองอาร์เรย์
- สำหรับแต่ละองค์ประกอบ i ใน arr2 −
- สำหรับ j ในช่วง 0 ถึง D[i] – 1
- เติม i ลงใน res
- D[i] :=0
- สำหรับ j ในช่วง 0 ถึง D[i] – 1
- สำหรับ (คีย์, ค่า) คู่ใน D
- ถ้าค่าไม่ใช่ 0 แล้ว
- สำหรับ i :=0 ถึงค่า – 1
- เพิ่มคีย์ลงใน temp
- สำหรับ i :=0 ถึงค่า – 1
- ถ้าค่าไม่ใช่ 0 แล้ว
- จัดเรียง temp array เพิ่ม temp ที่ส่วนท้ายของ res และคืนค่า res
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object):
def relativeSortArray(self, arr1, arr2):
d = {}
for i in arr1:
if i not in d:
d[i]= 1
else:
d[i]+=1
res = []
temp = []
for i in arr2:
for j in range(d[i]):
res.append(i)
d[i] =0
for k,v in d.items():
if v:
for i in range(v):
temp.append(k)
temp.sort()
res.extend(temp)
return res
ob1 = Solution()
print(ob1.relativeSortArray([2,3,1,4,2,4,6,7,9,2,19] ,[2,1,4,3,9,6])) อินพุต
[2,3,1,3,2,4,6,7,9,2,19] [2,1,4,3,9,6]
ผลลัพธ์
[2, 2, 2, 1, 4, 4, 3, 9, 6, 7, 19]