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
Yorum Gönder