Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Find Original Array From Doubled Array

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "2007" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

An integer array original is transformed into a doubled array changed by appending twice the value of every element in original, and then randomly shuffling the resulting array. Given an array changed, return original if changed is a doubled array. If changed is not a doubled array, return an empty array. The elements in original may be returned in any order. Example 1: Input: changed = [1,3,4,2,6,8] Output: [1,3,4] Explanation: One possible original array could be [1,3,4]: - Twice the value of 1 is 1 2 = 2. - Twice the value of 3 is 3 2 = 6. - Twice the value of 4 is 4 * 2 = 8. Other original arrays could be [4,3,1] or [3,1,4]. Example 2: Input: changed = [6,3,0,1] Output: [] Explanation: changed is not a doubled array. Example 3: Input: changed = [1] Output: [] Explanation: changed is not a doubled array. Constraints: 1 <= changed.length <= 105 0 <= changed[i] <= 105

Explanation

Here's a breakdown of the approach, followed by the Python code:

  • Frequency Counting: Use a dictionary (or Counter) to store the frequency of each number in the changed array. This allows for efficient lookup when trying to find doubles.

  • Iterative Reconstruction: Iterate through the sorted keys of the frequency map. If a number x exists, check if 2*x also exists with a sufficient frequency. If not, the array is not a doubled array. If it exists, decrement both frequencies accordingly and add x to the result.

  • Early Exit: If the length of changed is odd, it cannot be a doubled array. Return an empty array immediately.

  • Time & Space Complexity: O(n log n) time due to sorting the keys of the Counter, and O(n) space for the Counter and the result array.

Code

    from collections import Counter

def findOriginalArray(changed):
    """
    Recovers the original array from a doubled and shuffled array.

    Args:
        changed: The doubled and shuffled array.

    Returns:
        The original array if it's a doubled array, otherwise an empty array.
    """

    if len(changed) % 2 != 0:
        return []

    count = Counter(changed)
    original = []

    for x in sorted(count.keys()):
        if count[x] > 0:
            if count[2 * x] < count[x]:
                return []

            for _ in range(count[x]):
                 original.append(x)
                 count[2 * x] -= 1
    return original

More from this blog

C

Chatmagic blog

2894 posts