Two pointers tekniği nedir? Sıralı bir dizideki tekrarları yerinde nasıl silersiniz?
Cevap
Two pointers, dizi üzerinde iki indeksin belirli bir kurala göre hareket ettirilmesidir. Ek bellek kullanmadan O(n) çözümler sağlar. İki yaygın biçimi vardır:
- Zıt uçlardan: biri baştan, biri sondan içe doğru (palindrom kontrolü, sıralı dizide hedef toplam).
- Aynı yönde, farklı hızda: biri okur, biri yazar (tekrar silme, sıfırları sona taşıma).
Problem: sıralı dizide tekrarları yerinde silme
[1,1,2,3,3] -> ilk 3 eleman [1,2,3], dönüş değeri 3.
def remove_duplicates(nums):
if not nums:
return 0
write = 1 # bir sonraki benzersiz elemanın yazılacağı yer
for read in range(1, len(nums)):
if nums[read] != nums[write - 1]:
nums[write] = nums[read]
write += 1
return writeZaman O(n), bellek O(1).
Zıt uç örneği: palindrom
def is_palindrome(s):
i, j = 0, len(s) - 1
while i < j:
if s[i] != s[j]:
return False
i += 1; j -= 1
return TrueDizi sıralı ise iki işaretçi tekniği çoğu zaman hash map'e gerek bırakmaz; örneğin sıralı dizide toplamı hedefe eşit çift ararken toplam küçükse sol, büyükse sağ işaretçi hareket ettirilir.
İlgili Algoritmalar & Veri Yapıları soruları
- Binary search'ün zaman karmaşıklığı nedir ve neden?
- Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.
- Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"
- Tek yönlü bağlı listeyi ters çevirin.
- BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?
- get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.