Max subarray length which sum not bigger than the main array length
JavaScript
// Max subarray length which sum not bigger than the array (a) length
function maxLength(a) {
// All subarrays
let subarrays =
a.reduce((acc, e, i) => {
acc.push(
// Array element
[e],
// Possible combinations
...a.reduce((acc_a, _, j) =>
acc_a.concat(a.slice(j).reduce((acc_b, a_b) => {
if (a.slice(i, j).length)
acc_b.push([...a.slice(i, j), a_b]);
return acc_b;
}, [])),
[]));
return acc;
}, []);
console.log(subarrays)
// 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]);