Leetcode 136 Single Number

Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?

  • Bir seen adında liste oluştururuz.Bize verilen listede dolaşarak gördüğümüz elemanları eğer seen listesinde yok iseler seen listesine ekleriz.Eğer seen listesinde var iseler o zaman bu elemanı seen listesinden sileriz.Verilen listeyi taramamız bittiğinde seen listesindeki eleman tek olan elemandır.
  • Listeyi set olacak şekilde düzenleriz.
  • Sadece benzersiz olanları içeren set listenin toplamınını 2 ile çarparız.
  • Elimizdeki ilk listenin toplamını alırız.
  • Set listenin 2 katından elimizdeki listeyi çıkardığımızda tekrar etmeyen sayı kalacaktır.
  • Elimizdeki listeyi XOR layarak tek olan elemana ulaşabiliriz.XOR yöntemi sayesinde çiftler birbirlerini sıfırlayacaklardır.
    def singleNumber(self, nums):
        seen = []
        for num in nums:
            if num not in seen:
                seen.append(num)
            else:
                seen.remove(num)
        return seen[-1]
    def singleNumber(self, nums: List[int]) -> int:
        return 2*sum(set(nums))-sum(nums)
def singleNumber(nums):
    a = 0
    for i in nums:
        a ^= i
    return a