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


	# 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](https://www.chatmagic.app), 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
	```python
	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
	```
			
