Leetcode 75 Sort Colors

We will use the integers 0, 1, and 2 to represent the color red, white, and blue, respectively.

You must solve this problem without using the library’s sort function.

Input: nums = [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]
Input: nums = [2,0,1]
Output: [0,1,2]
  • Soruda bizden verilen rekleri sıralamamız isteniyor. Renkleri sayısal olarak 0,1,2 olarak temsil edebiliriz.Ve sıralamayı kütüphane fonksiyonları kullanmadan ayrıca ekstra bellek oluşturmadan yapmamız isteniyor.
  • İlk olarak elimizde sadece 3 farklı sayı var bunları işaretçi kullanarak sıralayabiliriz.
  • 3 işaretçimiz olur sol,sağ ve i .
  • i ilerleteceğimiz işaretçidir.i=0 durumunda i değerini sol ile değiştiririz.i ve l indekslerini 1 arttırırız.
  • i=2 durumunda i değerini sağ işaretçi ile değiştiririz. r değerini 1 azaltırız ama i değerini arttırmayız.Çünkü i değerini arttırmamız durumunda arada sayı kaçırma ihtimalimiz olur.
  • i=1 durumunda bir değişiklik yapmaz sadece i indeksini 1 arttırırız.
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        l,r = 0,len(nums)-1
        i=0
        
        def swap(i,j):
            tmp = nums[i]
            nums[i] = nums[j]
            nums[j] = tmp
        
        while i<=r:
            if nums[i] == 0:
                swap(l,i)
                l += 1
            elif nums[i] == 2:
                swap(i,r)
                r-=1
                i-=1
            i +=1