Leetcode, Remove Duplicates from Sorted Array probleminin çözümü

class Solution {
    fun removeDuplicates(nums: IntArray): Int {
        
        //Eğer liste boş ise 0 döndürelim.
        if(nums.size == 0) return 0
        
        //Tekrar gruplarındaki ilk elemanın indeksini işaret eden değişkenimiz.
        var firstIndexOfDuplications: Int = 0
        
        for(i in 0..nums.size-1){
        	//Bir önceki eleman ile aynıysa döngüyü atla.
            if(i>0 && nums[i-1] == nums[i]) continue
            
            //Bir önceki eleman ile aynı değilse (yani farklı bir rakam geldiğinde)
            //Tekrar grubunun ilk elemanı hariç tüm elemanları nums[i]'ye eşitle ve
            //işaretçinin değerini bir artır.
            if(i>0){
                for(x in (firstIndexOfDuplications+1)..i){
                    nums[x] = nums[i]
                }
                firstIndexOfDuplications += 1
            }
        }
        
        return firstIndexOfDuplications+1 //+1 çünkü eleman sayısı soruluyor.
    }
}

Diyelim ki dizimiz [1,2,2,3] olsun, aşamalı bir şekilde ilerleyelim:

i = 0 için: Bu aşamada döngü içinde çalışan bir kod yok.

i = 1 için: Birinci indeksteki 2 rakamı, bir önceki indeksteki 1 rakamı ile aynı değil, nums dizisinde indeksleri firstIndexOfDuplications(0) + 1 = 1 ile i(1) arasındaki (yani sadece birinci indeksteki eleman) elemanların hepsini nums[i]'ye yani 2'ye eşitle. nums[1] = nums[1] olduğundan bir şey değişmiyor. firstIndexOfDuplications 0'dan 1'e artırılıyor.

i = 2 için: İkinci indeksteki 2 rakamı bir önceki eleman ile aynı. Bu döngü continue ile atlanıyor. firstIndexOfDuplications değişmedi ve şuan hala birinci indeksteki 2 rakamını gösteriyor.

i = 3 için: Üçüncü indeksteki eleman olan 3 rakamı bir önceki eleman olan 2'den farklı. firstIndexOfDuplications 1'e eşit, yani birinci indeksteki 2 rakamını işaret ediyor. Bu aşamada yine ikinci if kapsamı çalışıyor ve birinci indeksteki 2 rakamı hariç geri kalan rakamların hepsi 3'e eşitleniyor ve firstIndexOfDuplications değişkeni 1'den 2'ye yükseltiliyor, yani dizideki ilk 3 rakamının indeksine sahip oluyor. Böylece dizimiz şuan [1,2,3,3] oldu ve döngü bitti. Döngü bittiğinde son tekrar grubundaki ilk elemanın indeksi firstIndexOfDuplications değişkeninde. Bu indeks dahil olmak üzere baştan itibaren bulunan eleman sayısı, bu değerin 1 fazlasına eşit olduğundan firsIndexOfDuplications + 1 şeklinde döndürerek çözümü tamamlıyoruz.

Yorumlar