Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การสลับค่าตัวเลขคู่ติดกันในลิสต์ Python

ภาพรวม

โจทย์ต้องการสลับตำแหน่งของตัวเลขคู่ (even numbers) ที่อยู่ติดกันในลิสต์ โดยคู่แรกกับคู่ที่สองสลับกัน คู่ที่สามกับคู่ที่สี่สลับกัน เป็นต้น

ตัวอย่าง

อินพุต: [4, 5, 6, 8, 10]

ตัวเลขคู่: 4, 6, 8, 10 (อยู่ตำแหน่ง 0, 2, 3, 4)

สลับ 4↔6 และ 8↔10 → [6, 5, 4, 10, 8]

อัลกอริทึม

  1. สร้างตัวแปร temp = None เก็บดัชนีตัวเลขคู่ล่าสุดที่ยังไม่ได้จับคู่
  2. วนลูปผ่านทุกดัชนี i ของลิสต์
  3. ถ้า nums[i] เป็นเลขคู่:
    • ถ้า temp มีค่า (มีคู่ก่อนหน้ารออยู่) → สลับ nums[i] กับ nums[temp] แล้วรีเซต temp = None
    • ถ้า temp เป็น None → เก็บ temp = i (รอคู่ถัดไป)
  4. คืนลิสต์ที่แก้ไขแล้ว

โค้ด 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]))

การทำงานทีละขั้น

inums[i]คู่?tempการกระทำลิสต์หลังเปลี่ยน
04ใช่Nonetemp=0[4,5,6,8,10]
15ไม่0-[4,5,6,8,10]
26ใช่0สลับ 0↔2, temp=None[6,5,4,8,10]
38ใช่Nonetemp=3[6,5,4,8,10]
410ใช่3สลับ 3↔4, temp=None[6,5,4,10,8]

ผลลัพธ์

[6, 5, 4, 10, 8]