You need to enable JavaScript to run this app.

Ana içeriğe geç

Günün Kod Sorusu ve Çözümü

Administrator
Günün Kod Sorusu ve Çözümü
Soru
Verilen bir tamsayı dizisinde, her elemanın yalnızca bir kez göründüğü ve 1'den n'e kadar olan tüm sayıların bulunduğu bir diziden eksik olan sayıyı bulun. Dizideki sayılar 1 ile n arasında olup, n dizinin uzunluğudur.
Örnek:
Kod:
Girdi: nums = [4,3,2,7,8,2,3,1]
Çıktı: 5
Açıklama: 1'den 8'e kadar olan sayılar arasında 5 eksik.
Kısıtlamalar:
  • Dizinin uzunluğu n'dir.
  • 1 ≤ nums[i] ≤ n
  • Her sayı yalnızca bir kez görünür, ancak bir sayı eksik.
Çözüm
Bu problemi çözmek için XOR işlemini kullanabiliriz. XOR'un özellikleri sayesinde, aynı sayılar birbirini sıfırlarken eksik olan sayı bulunabilir. Algoritma şu şekilde çalışır:
  1. 1'den n'e kadar olan tüm sayıların XOR'unu hesapla.
  2. Dizideki tüm sayıların XOR'unu hesapla.
  3. Bu iki XOR sonucunu birbiriyle XOR yaparak eksik sayıyı bul.
Python Kodu
Kod:
def findMissingNumber(nums):
    n = len(nums)
    xor_all = 0
    for i in range(1, n + 1):
        xor_all ^= i
   
    xor_array = 0
    for num in nums:
        xor_array ^= num
   
    return xor_all ^ xor_array
# Test
nums = [4, 3, 2, 7, 8, 2, 3, 1]
print(findMissingNumber(nums))  # Çıktı: 5
Çözümün Açıklaması
  • Adım 1: xor_all, 1'den n'e kadar olan sayıların XOR'unu tutar. Örneğin, n=8 için 1^2^3^4^5^6^7^8 hesaplanır.
  • Adım 2: xor_array, dizideki tüm sayıların XOR'unu tutar. Örneğin, [4,3,2,7,8,2,3,1] için 4^3^2^7^8^2^3^1 hesaplanır.
  • Adım 3: xor_all ^ xor_array işlemi, aynı sayıların birbirini sıfırlaması nedeniyle yalnızca eksik sayıyı döndürür.
Zaman ve Uzay Karmaşıklığı
  • Zaman Karmaşıklığı: O(n), çünkü diziyi ve 1'den n'e kadar olan sayıları birer kez tarıyoruz.
  • Uzay Karmaşıklığı: O(1), çünkü yalnızca birkaç değişken kullanıyoruz.
Bu çözüm, hem verimli hem de kolay anlaşılır bir yaklaşımdır. XOR işlemi sayesinde ek veri yapısına ihtiyaç duymadan eksik sayıyı bulabiliriz.