สมมติว่าเรามีอาร์เรย์ที่มีวัตถุ n รายการ สิ่งเหล่านี้เป็นสีแดง สีขาว หรือสีน้ำเงิน จัดเรียงให้เข้าที่เพื่อให้วัตถุที่มีสีเดียวกันอยู่ติดกัน โดยเรียงตามลำดับสี แดง ขาว และน้ำเงิน ในที่นี้ เราจะใช้ตัวเลขเช่น 0, 1 และ 2 เพื่อแสดงสีแดง สีขาว และสีน้ำเงินตามลำดับ ดังนั้นหากอาร์เรย์เป็นเหมือน [2,0,2,1,1,0] ผลลัพธ์จะเป็น [0,0,1,1,2,2]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ตั้งค่าต่ำ :=0, กลาง :=0 และสูง :=ความยาวของอาร์เรย์ – 1
- ขณะกลาง <=สูง
- ถ้า arr[mid] =0 ให้สลับ arr[mid] และ arr[low] และเพิ่มค่าต่ำและกลางขึ้น 1
- มิฉะนั้น เมื่อ arr[mid] =2, สลับ arr[high] และ arr[mid], ลดระดับสูงสุด 1
- อย่างอื่นเพิ่มขึ้นกลาง 1
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
class Solution(object): def sortColors(self, nums): low = 0 mid = 0 high = len(nums)-1 while mid<=high: if nums[mid] == 0: nums[low],nums[mid] = nums[mid],nums[low] low+=1 mid += 1 elif nums[mid] == 2: nums[high], nums[mid] = nums[mid], nums[high] high-=1 else: mid += 1 return nums ob1 = Solution() print(ob1.sortColors([2,0,2,1,1,0]))
อินพุต
[2,0,2,1,1,0]
ผลลัพธ์
[0,0,1,1,2,2]