Bit manipülasyonu: bir sayının 2'nin kuvveti olup olmadığını ve dizide tek kez geçen elemanı (Single Number) nasıl bulursunuz?

Cevap

İki klasik hile: n & (n - 1) en sağdaki 1 bitini siler; x ^ x = 0 ve x ^ 0 = x olduğundan XOR çift tekrarları yok eder.

2'nin kuvveti mi?

2'nin kuvvetlerinde tam olarak bir bit 1'dir (8 = 1000). n - 1 o biti 0, altındakileri 1 yapar (0111); AND sonucu 0'dır.

def is_power_of_two(n):
    return n > 0 and (n & (n - 1)) == 0

print(is_power_of_two(16), is_power_of_two(18))  # True False

Single Number

Her eleman iki kez, biri bir kez geçiyorsa hepsini XOR'larız; çiftler birbirini sıfırlar.

from functools import reduce
from operator import xor

def single_number(nums):
    return reduce(xor, nums, 0)

print(single_number([4, 1, 2, 1, 2]))  # 4

O(n) zaman, O(1) bellek; hash set çözümü ise O(n) bellek ister.

1 bitlerini sayma (Hamming weight)

def count_bits(n):
    count = 0
    while n:
        n &= n - 1     # her turda bir 1 bitini sil
        count += 1
    return count

Sık kullanılan işlemler

İşlemİfade
i. biti oku(n >> i) & 1
i. biti set etn ile 1 << i bitwise OR (aşağıdaki koda bakın)
i. biti temizlen & ~(1 << i)
i. biti terslen ^ (1 << i)
En düşük 1 bitin & -n
n = 0b1000
n = n | (1 << 1)   # set   -> 0b1010
n = n & ~(1 << 3)  # clear -> 0b0010

Python'da tam sayılar sınırsız olduğu için negatif sayılarla kaydırma ve 32-bit taşma davranışı C/Java'dan farklıdır; gerekirse & 0xFFFFFFFF ile maskeleyin.

  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