Max subarray length which sum not bigger than the main array length

by Génesis García Morilla

JavaScript

// Max subarray length which sum not bigger than the array (a) length
function maxLength(a) {
  // All subarrays
  let subarrays =
    a.reduce((acc, e) => {
      const subsets = acc.map(subset => [...subset, e]);
      return acc.concat(subsets);  
    }, [[]]);
        
  // Get the longest
  let max_length = 0;
  subarrays.forEach(sub => {
    const sum = sub.reduce((acc, n) => acc += n, 0);

    if (sum <= a.length && sub.length > max_length)
      max_length = sub.length;
  });

  return max_length;
}

document.body.textContent = maxLength([1,2,3,4]);