Thanks for this technique Claude:

function productExceptSelf(nums: number[]): number[] {
    const n = nums.length
    const results = Array(n).fill(1)
 
    let prefixProd = 1
    for (let i = 0; i < n; i++){
        results[i] *= prefixProd
        prefixProd *= nums[i]
    }
 
    let suffixProd = 1
    for (let i = nums.length - 1; i >= 0; i--){
        results[i] *= suffixProd
        suffixProd *= nums[i]
    }
    
    return results
};

Memorized, understood, and time to completion down to 1:32

Not bad. This two pass system is very cool. It’s like weaving numbers.

Made a mistake at one point with:

prefixProd *= results[i]

But if it’s written this way, I believe the results at i will always be 1, and never be changed.