สมมติว่าเรามีสองลิสต์ L1 และ L2 ความยาวเท่ากัน n ค่าแต่ละตัวไม่ซ้ำกัน และอยู่ในช่วง 1 ถึง n หาจำนวนการสลับติดกัน (adjacent swaps) น้อยที่สุดเพื่อเปลี่ยน L1 ให้กลายเป็น L2
ตัวอย่าง
อินพุต: L1 = [0, 1, 2, 3], L2 = [2, 0, 1, 3]
เอาต์พุต: 2
สลับ 1 กับ 2 -> [0, 2, 1, 3] แล้วสลับ 0 กับ 2 -> [2, 0, 1, 3]
ขั้นตอนการแก้ปัญหา
จับคู่ตำแหน่งใน L1 ตามลำดับใน L2:
ans = 0- สำหรับแต่ละ
reqในL2:- หาดัชนี
iของreqในL1 - ลบอิลิเมนต์ตำแหน่ง
iออกจากL1 ans += i(จำนวนการสลับที่ต้องย้ายมาหน้า)
- หาดัชนี
- คืนค่า
ans
การนำไปใช้ใน Python
class Solution:
def solve(self, L1, L2):
ans = 0
for req in L2:
i = L1.index(req)
L1.pop(i)
ans += i
return ans
ob = Solution()
L1 = [0, 1, 2, 3]
L2 = [2, 0, 1, 3]
print(ob.solve(L1, L2))
อินพุต
[0, 1, 2, 3], [2, 0, 1, 3]
เอาต์พุต
2