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

โปรแกรมหาจำนวนสีที่เหลือน้อยที่สุดหลังรวมสีใน Python

สมมติว่าเรามีรายการสี (R, G, B) ถ้าสีต่างกันอยู่ติดกัน สามารถรวมกลายเป็นสีที่สามได้ ต้องการหาจำนวนสีที่เหลือน้อยที่สุดหลังทำการรวมอย่างใดอย่างหนึ่ง

เช่น colors = ["G", "R", "G", "B", "R"] ผลลัพธ์ = 1 สามารถรวมได้จนเหลือ 1 สี

ขั้นตอนการแก้ปัญหา (XOR Properties)

  • n := len(colors)
  • ถ้ามีสีเพียงสีเดียว คืน n
  • ถ้า n <= 1 คืน n
  • x := 0, d := {"R": 1, "G": 2, "B": 3}
  • วนทุก c ใน colors: x ^= d[c]
  • คืน 2 if x == 0 else 1

เหตุผล: การแทนสีด้วย 1,2,3 และ XOR ทั้งหมด จะได้ invariant ของระบบ

ตัวอย่างโค้ด

class Solution:
    def solve(self, colors):
        n = len(colors)
        if len(set(colors)) == 1:
            return n
        if n <= 1:
            return n
        x = 0
        d = {"R": 1, "G": 2, "B": 3}
        for qux in colors:
            x ^= d[qux]
        return 2 if x == 0 else 1

ob = Solution()
colors = ["G", "R", "G", "B", "R"]
print(ob.solve(colors))

ข้อมูลนำเข้า

["G", "R", "G", "B", "R"]

ผลลัพธ์

1