Leetcode 128 Longest Consecutive Sequence
Soru
Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n) time.
Örnek 1
Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
Örnek 2
Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
Çözüm
- Verilen bir tam sayı dizisindeki en uzun ardışık eleman dizisini bulmanızı gerektiren bir problem. Bu sorun, elemanların dizide sıralı olarak verilmediği durumlarda da ardışık sayı dizisini etkin bir şekilde tespit etmeyi amaçlar.
- Bu problemi çözmek için en etkili yöntem, bir set kullanmaktır. Set yapısı, herhangi bir elemanın mevcut olup olmadığını O(1) zaman karmaşıklığında kontrol etmenize olanak tanır.
- Algoritma Adımları:
- Tüm elemanları bir set içine yerleştirin.
- Dizi üzerinde döngü yaparak, her eleman için, bu elemanın ardışık dizinin başlangıcı olup olmadığını kontrol edin. Bir elemanın ardışık dizinin başlangıcı olması için, ondan bir eksik olan elemanın sette olmaması gerekir.
- Eğer eleman ardışık dizinin başlangıcıysa, bu elemandan itibaren ardışık olarak kaç eleman olduğunu sayın.
- En yüksek sayımı kaydedin.
Code
def longestConsecutive(self, nums: List[int]) -> int:
num_set = set(nums)
longest_streak = 0
for num in num_set:
# Sadece ardışık dizinin başlangıç elemanı için işlem yap
if num - 1 not in num_set:
current_num = num
current_streak = 1
while current_num + 1 in num_set:
current_num += 1
current_streak += 1
longest_streak = max(longest_streak, current_streak)
return longest_streak
Complexity
- Time complexity (Zaman Karmaşıklığı): Her bir eleman için, ondan büyük ardışık elemanları aramak için set içinde kontrol yapılır. Ancak her eleman, ardışık dizi içinde sadece bir kez ziyaret edilir. Bu nedenle, toplam zaman karmaşıklığı ortalama O(n)‘dir.
- Space complexity (Alan Karmaşıklığı): Tüm elemanları saklamak için bir set kullanıldığı için alan karmaşıklığı O(n) olur.