ภาพรวม
โจทย์ต้องการสลับตำแหน่งของตัวเลขคู่ (even numbers) ที่อยู่ติดกันในลิสต์ โดยคู่แรกกับคู่ที่สองสลับกัน คู่ที่สามกับคู่ที่สี่สลับกัน เป็นต้น
ตัวอย่าง
อินพุต: [4, 5, 6, 8, 10]
ตัวเลขคู่: 4, 6, 8, 10 (อยู่ตำแหน่ง 0, 2, 3, 4)
สลับ 4↔6 และ 8↔10 → [6, 5, 4, 10, 8]
อัลกอริทึม
- สร้างตัวแปร
temp = Noneเก็บดัชนีตัวเลขคู่ล่าสุดที่ยังไม่ได้จับคู่ - วนลูปผ่านทุกดัชนี
iของลิสต์ - ถ้า
nums[i]เป็นเลขคู่:- ถ้า
tempมีค่า (มีคู่ก่อนหน้ารออยู่) → สลับnums[i]กับnums[temp]แล้วรีเซตtemp = None - ถ้า
tempเป็น None → เก็บtemp = i(รอคู่ถัดไป)
- ถ้า
- คืนลิสต์ที่แก้ไขแล้ว
โค้ด Python
class Solution:
def solve(self, nums):
temp = None
for i in range(len(nums)):
if nums[i] % 2 == 0:
if temp is not None:
nums[i], nums[temp] = nums[temp], nums[i]
temp = None
else:
temp = i
return nums
ob = Solution()
print(ob.solve([4, 5, 6, 8, 10]))
การทำงานทีละขั้น
| i | nums[i] | คู่? | temp | การกระทำ | ลิสต์หลังเปลี่ยน |
|---|---|---|---|---|---|
| 0 | 4 | ใช่ | None | temp=0 | [4,5,6,8,10] |
| 1 | 5 | ไม่ | 0 | - | [4,5,6,8,10] |
| 2 | 6 | ใช่ | 0 | สลับ 0↔2, temp=None | [6,5,4,8,10] |
| 3 | 8 | ใช่ | None | temp=3 | [6,5,4,8,10] |
| 4 | 10 | ใช่ | 3 | สลับ 3↔4, temp=None | [6,5,4,10,8] |
ผลลัพธ์
[6, 5, 4, 10, 8]