NeetCode 150 / Arrays & Hashing

009Longest Consecutive Sequence

MediumArrays & HashingO(n)
ভিডিওতে দেখো — YouTube @algonur_com

কোড

Python
def longestConsecutive(nums: list[int]) -> int:
    num_set = set(nums)
    best = 0
    for n in num_set:
        if n - 1 not in num_set:  # start of a sequence
            cur = n
            while cur in num_set:
                cur += 1
            best = max(best, cur - n)
    return best
Java
public int longestConsecutive(int[] nums) {
    Set<Integer> set = new HashSet<>();
    for (int n : nums) set.add(n);
    int best = 0;
    for (int n : set) {
        if (!set.contains(n - 1)) {
            int cur = n;
            while (set.contains(cur)) cur++;
            best = Math.max(best, cur - n);
        }
    }
    return best;
}
Kotlin
fun longestConsecutive(nums: IntArray): Int {
    val set = nums.toHashSet()
    var best = 0
    for (n in set) {
        if (n - 1 !in set) {
            var cur = n
            while (cur in set) cur++
            best = maxOf(best, cur - n)
        }
    }
    return best
}
C++
int longestConsecutive(vector<int>& nums) {
    unordered_set<int> s(nums.begin(), nums.end());
    int best = 0;
    for (int n : s) {
        if (!s.count(n-1)) {
            int cur = n;
            while (s.count(cur)) cur++;
            best = max(best, cur - n);
        }
    }
    return best;
}
C
int cmpInt(const void* a, const void* b) { return *(int*)a - *(int*)b; }
int longestConsecutive(int* nums, int n) {
    if (!n) return 0;
    qsort(nums, n, sizeof(int), cmpInt);
    int best=1, cur=1;
    for (int i=1;i<n;i++) {
        if (nums[i]==nums[i-1]) continue;
        cur = (nums[i]==nums[i-1]+1) ? cur+1 : 1;
        if (cur>best) best=cur;
    }
    return best;
}

জটিলতা

O(n)
সময় — অ্যারেটা একবারই ঘুরি, ম্যাপে খোঁজা O(1)।
O(n)
জায়গা — সবচেয়ে খারাপ ক্ষেত্রে সব সংখ্যা ম্যাপে থাকে।
আগের সমস্যা← Valid Sudokuপরের সমস্যাValid Palindrome →