function processArray(array) { if(!array.length || array.filter(a => a !== 1).length === array.length) return 0; if(array.filter(a => a === 1).length === array.length) return array.length - 1; return Math.max(...array.reduce((r, n, i, arr) => { const count = (() => { if(!r[i - 1] || r[i - 1].num !== n) return 1; return (r?.[i - 1]?.count + 1); })(); const countWithNextDelete = (() => { if(i >= arr.length - 1) return count; if(arr[i + 1] === n) return count; let tempCount = count; for(let q = i + 2; i <= arr.length; q++) { if(arr[q] === n) { tempCount += 1; } else { break; } } return tempCount; })(); const nextCountWithoutDelete = (() => { if(i >= arr.length - 1) return count; let tempCount = 1; for(let q = i + 1; i <= arr.length; q++) { if(arr[q] === n) { tempCount += 1; } else { break; } } return tempCount; })(); const countWithPrevDelete = (() => { if(r?.[i - 1]?.num === n) return count; let tempCount = nextCountWithoutDelete; for(let q = 0; q < i - 1; q++) { if(r?.[i - q]?.n === n) { tempCount += 1; } else { break; } } return tempCount; })(); const current = { num: n, count, countWithNextDelete, countWithPrevDelete }; r.push(current); return r; }, []).map(item => Math.max(item.countWithNextDelete, item.countWithPrevDelete))); }