Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement