สมมติว่าเรามีรายการสตริงสีที่อาจมี "red", "green", "blue" เราต้องจัดแบ่งรายการให้สีแดง (red) อยู่หน้าสีเขียว (green) และสีเขียวอยู่หน้าสีน้ำเงิน (blue)
ตัวอย่างเช่น หาก colors = ["blue", "green", "blue", "red", "red"] ผลลัพธ์จะเป็น ['red', 'red', 'green', 'blue', 'blue']
ขั้นตอนการแก้ปัญหา (Dutch National Flag Algorithm - 3-way Partition)
- กำหนดตัวนับ
green = 0,blue = 0,red = 0 - วนลูปผ่านแต่ละ
stringในstrs:- หากเป็น "red":
strs[blue] = "blue";blue += 1strs[green] = "green";green += 1strs[red] = "red";red += 1
- หากเป็น "green":
strs[blue] = "blue";blue += 1strs[green] = "green";green += 1
- หากเป็น "blue":
strs[blue] = "blue";blue += 1
- หากเป็น "red":
- คืนค่า
strs
ตัวอย่างโค้ด Python
class Solution:
def solve(self, strs):
green = 0
blue = 0
red = 0
for string in strs:
if string == "red":
strs[blue] = "blue"
blue += 1
strs[green] = "green"
green += 1
strs[red] = "red"
red += 1
elif string == "green":
strs[blue] = "blue"
blue += 1
strs[green] = "green"
green += 1
elif string == "blue":
strs[blue] = "blue"
blue += 1
return strs
ob = Solution()
colors = ["blue", "green", "blue", "red", "red"]
print(ob.solve(colors)) # Output: ['red', 'red', 'green', 'blue', 'blue']
อินพุต
["blue", "green", "blue", "red", "red"]
เอาต์พุต
['red', 'red', 'green', 'blue', 'blue']