🚀 Fixing Time Limit Exceeded in “Longest Consecutive Sequence” (LeetCode 128)

Introduction

LeetCode’s Longest Consecutive Sequence problem challenges us to find the longest sequence of consecutive numbers in an unsorted array in O(n) time. My initial approach seemed correct but ran into Time Limit Exceeded (TLE) issues. After optimizing the code, I discovered that removing elements from the HashSet significantly improved performance. Let’s explore why!


My Initial (TLE) Solution

This solution checks each number and expands the sequence while map.Contains(num + length) remains true.

public class Solution {
public int LongestConsecutive(int[] nums) {
HashSet<int> map = new HashSet<int>(nums);
int result = 0;

foreach (int num in nums) {
if (!map.Contains(num - 1)) { // Start of sequence
int length = 0;
while (map.Contains(num + length)) {
length++;
}
result = Math.Max(result, length);
}
}
return result;
}
}

Why Does This Cause TLE?

🔴 Repeated Lookups: The while loop checks the same numbers multiple times.
🔴 Inefficient for Large Inputs: If the array is large, map.Contains(num + length) is called unnecessarily.


Optimized Solution (With set.Remove(currentNum))

Instead of checking the same numbers again, we remove elements from the set once we process them.

public class Solution {
public int LongestConsecutive(int[] nums) {
if (nums.Length == 0) return 0; // Handle empty array

HashSet<int> set = new HashSet<int>(nums);
int maxLength = 0;

foreach (int num in nums) {
if (!set.Contains(num - 1)) { // Start of sequence
int currentNum = num;
int length = 1;

while (set.Contains(currentNum + 1)) {
currentNum++;
length++;
set.Remove(currentNum); // Remove to avoid rechecking
}

maxLength = Math.Max(maxLength, length);
}
}
return maxLength;
}
}

Why Does set.Remove(currentNum) Improve Performance?

Each number is processed only once
Avoids redundant Contains() lookups
Reduces unnecessary iterations, ensuring O(n) complexity

By removing currentNum from set, we make sure that we never check the same number twice, significantly improving efficiency.


Time Complexity Analysis

  • Initial approach: Worst-case O(n²) due to redundant lookups. ❌
  • Optimized approach: O(n) since each number is visited only once. ✅

Final Thoughts

This simple fix—removing elements as they are processed—helps avoid unnecessary checks and reduces execution time drastically. If you’re facing TLE on LeetCode 128, adding set.Remove(currentNum) is the key! 🚀

What do you think? Have you faced similar performance issues? Let me know in the comments! 😊

Disclaimer: Code is fully written by me in this blog, but the text explaining the problem is generated with help of AI.

Leetcode: Plus One

You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0‘s.

Increment the large integer by one and return the resulting array of digits.

Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].

Example 2:

Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].

Example 3:

Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits does not contain any leading 0‘s.

My Solution

public class Solution {
    public int[] PlusOne(int[] digits) {
        for(int i = digits.Length-1; i>=0; i--)
        {
            if(digits[i] == 9)
            {
                digits[i] = 0;
            }
            else {
                digits[i]++;
                return digits;
            }
        }
        int[] dummyArray = new int[digits.Length+1];
        dummyArray[0] = 1;
        return dummyArray;
    }
}

Reference: https://leetcode.com/problems/plus-one/?envType=study-plan-v2&envId=top-interview-150