Tam sayılardan oluşan bir dizide 0'a eşit tüm elemanları sola taşıyan programın kodlarını kullandığınız programlama dili ile yazın.
Adımlar
oku
ve yaz
adında iki değişken oluşturup bu iki değişkeni dizinin son elemanının index'ine eşitleyin.
oku
değişkeni 0'dan küçük olana kadar aşağıdaki adımları dönün.
dizi[oku]
, 0'a eşit değilse dizi[yaz]
'ı dizi[oku]
'ya eşitleyip yaz
'ı 1 azaltın.
oku
'yu 1 azaltın.
dizi[yaz]
ve dizi[yaz]
'dan önceki tüm değerleri 0'a eşitleyin.
Python Kodları
def sifirlari_sola_kaydir(dizi):
if len(dizi) < 2:
return
yaz = len(dizi) - 1
oku = len(dizi) - 1
while(oku >= 0):
if dizi[oku] != 0:
dizi[yaz] = dizi[oku]
yaz -= 1
oku -= 1
while(yaz >= 0):
dizi[yaz] = 0
yaz -= 1
dizi = [0]
print("Orijinal dizi: ", dizi)
sifirlari_sola_kaydir(dizi)
print("Dizinin son hali: ", dizi)
Çalışma zamanı karmaşıklığı: O(n)
Hafıza karmaşıklığı: O(1)
Neden .sort()
Kullanmadık?
Bu gönderiden önce soruyu hikayede paylaşmıştım. Birçok kişi "sıralama yapmak yeterli yanıtını" verdi. Ama soruda "tam sayılar" diyor. Yani dizide negatif bir eleman da yer alabilir. Anlayacağınız sıralama yapmak her zaman çalışmıyor.
Biliyorum örnek verilen dizi için .sort()
metodu yeterli olduğundan bu yanıtı verdiniz. Ancak sınavda ya da mülakatta sizden, kodunuzun başka olasılıkları sağlayıp sağlamadığına bakmanız da istenir.
Bu durum okul ödevlerinde de böyledir. Yeni başlayacaklar dikkat etsin. 🙂
Kaynak: Educative