I am doing the Smallest possible sum Kata on CodeWars, which works fine for most arrays, but I get stuck when the algorithm is processing very large arrays:
Given an array X of positive integers, its elements are to be transformed by running the following operation on them as many times as required:
if X[i] > X[j] then X[i] = X[i] - X[j]
When no more transformations are possible, return its sum ("smallest possible sum").
For instance, the successive transformation of the elements of input
X = [6, 9, 21]
is detailed below:X_1 = [6, 9, 12] # -> X_1[2] = X[2] - X[1] = 21 - 9 X_2 = [6, 9, 6] # -> X_2[2] = X_1[2] - X_1[0] = 12 - 6 X_3 = [6, 3, 6] # -> X_3[1] = X_2[1] - X_2[0] = 9 - 6 X_4 = [6, 3, 3] # -> X_4[2] = X_3[2] - X_3[1] = 6 - 3 X_5 = [3, 3, 3] # -> X_5[1] = X_4[0] - X_4[1] = 6 - 3
The returning output is the sum of the final transformation (here 9).
And here is my recursive solution:
const solution =(numbers) => {
//1. find bigger and smallest number in the array, and keep the index of the biggest number
let bigger = Math.max(...numbers)
let smaller = Math.min(...numbers)
let index = numbers.findIndex((n)=> n === bigger)
//2. return the result if the result of the subtraction is positive or null
if (smaller === bigger) {
return numbers.reduce((a,c) => a + c)
}
//3.substract and replace
numbers.splice(index, 1, bigger-smaller)
return solution(numbers)
}
So I was wondering which operation in my solution is causing the time out; which is the most time consuming for the processor to loop through?