สมมติว่าเรามีรายการตัวเลขที่แตกต่างกัน เราต้องหาจำนวนสวอปขั้นต่ำที่จำเป็นในการจัดเรียงรายการตามลำดับที่เพิ่มขึ้น
ดังนั้น หากอินพุตเป็น nums =[3, 1, 7, 5] ผลลัพธ์จะเป็น 2 เนื่องจากเราสามารถสลับ 3 กับ 1 แล้ว 5 และ 7 ได้
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- sort_seq :=เรียงลำดับรายการ nums
- ตาราง :=แผนที่ใหม่
- สำหรับแต่ละดัชนี i และค่า n เป็น nums ทำ
- ตาราง[n] :=ฉัน
- สลับ :=0
- สำหรับ i ในช่วง 0 ถึงขนาดของ nums ให้ทำ
- n :=nums[i]
- s_n :=sort_seq[i]
- s_i :=ตาราง[s_n]
- ถ้า s_n ไม่เหมือนกับ n แล้ว
- สวอป :=สวอป + 1
- nums[s_i] :=n
- nums[i] :=s_n
- ตาราง[n] :=s_i
- ตาราง[s_n] :=ฉัน
- คืนสวอป
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
class Solution: def solve(self, nums): sort_seq = sorted(nums) table = {} for i, n in enumerate(nums): table[n] = i swaps = 0 for i in range(len(nums)): n = nums[i] s_n = sort_seq[i] s_i = table[s_n] if s_n != n: swaps += 1 nums[s_i] = n nums[i] = s_n table[n] = s_i table[s_n] = i return swaps ob = Solution() nums = [3, 1, 7, 5] print(ob.solve(nums))
อินพุต
[3, 1, 7, 5]
ผลลัพธ์
2