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 write

Zaman 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 True

Dizi 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.

  1. Binary search'ün zaman karmaşıklığı nedir ve neden?KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  2. Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  3. Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  4. Tek yönlü bağlı listeyi ters çevirin.OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  5. BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  6. get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.ZorAlgoritmalar & Veri YapılarıYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle