30 Days of LeetCode: Day 2 - Modify An Array in Place

30 Days of LeetCode: Day 2 - Modify An Array in Place

Today's LeetCode challenge- an “Array Transformation" algorithm- taught me an important lesson about array manipulation in JavaScript. The problem seemed straightforward: remove all occurrences of a specific value from an array. However, I discovered that understanding the term "in-place" was crucial to solving it correctly.

The Challenge

The problem asked us to remove all occurrences of a value from an array in-place. Here's what tripped me up - I initially wrote this solution:

var removeElement = function(nums, val) {
    const sorted = nums.sort((a,b) => a - b);
    const filtered = sorted.filter(item => item != val);
    return filtered.length;
};

This solution failed, and here's why: I had completely misunderstood what "in-place" meant.

Understanding "In-Place" vs "Out-of-Place"

In-place modification means changing the original array directly without creating any new arrays. Think of it as working with what you have, like rearranging furniture in a room rather than buying new furniture.

Out-of-place operations, on the other hand, create new arrays. My original solution using .filter() was out-of-place because it created a new array instead of modifying the original one.

The Correct Solution

Here's how I fixed it to work in-place:

var removeElement = function(nums, val) {
    let k = 0; 

    for(let i = 0; i < nums.length; i++) {
        if(nums[i] !== val) {
            nums[k] = nums[i];
            k++;
        }
    }
    return k;
}

This solution:

  • Modify’s the array in-place with the use of a pointer k

  • Returns the length of the modified original array

Key Takeaways

When you see "in-place" in a problem:

  1. Avoid methods that create new arrays (.filter(), .map(), .slice()) as your solution.

  2. Remember to modify the original array or direct array index assignments.

  3. Remember that in-place operations typically use less memory (O(1) space complexity vs O(n))

Why It Matters

Understanding the difference between in-place and out-of-place operations isn't just about solving LeetCode problems. It's crucial for real-world applications where memory efficiency matters. In-place operations use less memory because they don't create copies of the data structure. Imagine you're managing a massive inventory system. During a flash sale, you need to update the stock levels of 100,000 products in real-time as orders come in. If each product record is 1KB in size, you have two options:

  1. Create a new copy of the entire inventory list each time you make updates (out-of-place)

    • This would temporarily need an extra 100MB of memory for each update

    • During high traffic, this could mean gigabytes of extra memory usage

  2. Update the existing inventory records directly (in-place)

    • Only uses the memory already allocated for the original inventory list

    • No extra memory needed regardless of how many updates you make

As I continue my LeetCode journey, I'll be paying closer attention to these technical terms. They're not just fancy words - they're crucial hints about the approach we need to take in understanding and applying algorithms!

Tomorrow, I'll tackle another challenge. Until then, happy coding!