LeetCode 74 · Search a 2D Matrix · Medium

Matriste Binary Search

Çözümün her adımını burada izleyebilirsin. Aranacak sayıyı seç, İleri'ye bas; matriste hangi hücreye bakıldığını ve kodun hangi satırının çalıştığını gör.

Fikir üç adımda

  1. 1

    Sayı tahmin oyunu

    1 ile 100 arasında bir sayı tuttum; her tahmininde “daha büyük” ya da “daha küçük” diyorum. En akıllıca tahmin hep ortadan yapılır, çünkü her cevap kalan sayıların yarısını eler. Binary search budur.

  2. 2

    Matris aslında sıralı bir liste

    Her satır sıralı ve her satır, öncekinin son sayısından büyük başlıyor. Satırları uç uca eklersen tek bir sıralı liste çıkar: 1, 3, 5, 7, 10, 11, 16, 20, 23, 30, 34, 60. Tahmin oyununu bu listede oynayabiliriz.

  3. 3

    Listeyi kopyalamadan oku

    Listenin k'inci sayısı matriste satır = k / 4, sütun = k % 4 konumunda (4 = sütun sayısı). / küsuratı atar, % kalanı verir. Örneğin 9 / 4 = 2 ve 9 % 4 = 1, yani 9 numaralı sayı matrix[2][1] = 30.

Adım adım izle

Matris (köşedeki küçük sayı, hücrenin listedeki sırası)

Aynı sayılar, tek sıra halinde

hâlâ aranan aralık ortadaki (mid) elendi bulundu

Değişkenler

Kod (Solution.cs içindeki metot)

Neden bu kadar hızlı?

Her bakış, kalan aralığı yarıya indiriyor: 12 → 6 → 3 → 1. Bu 12 sayılık örnekte en fazla 4 bakış yeter. LeetCode'daki en büyük matriste (100 × 100 = 10.000 hücre) bile en fazla 14 bakış yeter. Bütün hücreleri tek tek gezseydik bu, 10.000 bakış demekti.