Advertisement
KoctrX

Untitled

Feb 21st, 2025
473
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function processArray(array) {
  2.     if(!array.length || array.filter(a => a !== 1).length === array.length) return 0;
  3.     if(array.filter(a => a === 1).length === array.length) return array.length - 1;
  4.    
  5.     return Math.max(...array.reduce((r, n, i, arr) => {
  6.         const count = (() => {
  7.             if(!r[i - 1] || r[i - 1].num !== n) return 1;
  8.             return (r?.[i - 1]?.count + 1);
  9.         })();
  10.        
  11.         const countWithNextDelete = (() => {
  12.             if(i >= arr.length - 1) return count;
  13.             if(arr[i + 1] === n) return count;
  14.    
  15.             let tempCount = count;
  16.             for(let q = i + 2; i <= arr.length; q++) {
  17.                 if(arr[q] === n) {
  18.                     tempCount += 1;
  19.                 } else {
  20.                     break;
  21.                 }
  22.             }
  23.    
  24.             return tempCount;
  25.         })();
  26.    
  27.         const nextCountWithoutDelete = (() => {
  28.             if(i >= arr.length - 1) return count;
  29.    
  30.             let tempCount = 1;
  31.             for(let q = i + 1; i <= arr.length; q++) {
  32.                 if(arr[q] === n) {
  33.                     tempCount += 1;
  34.                 } else {
  35.                     break;
  36.                 }
  37.             }
  38.    
  39.             return tempCount;
  40.         })();
  41.    
  42.         const countWithPrevDelete = (() => {
  43.             if(r?.[i - 1]?.num === n) return count;
  44.    
  45.             let tempCount = nextCountWithoutDelete;
  46.             for(let q = 0; q < i - 1; q++) {
  47.                 if(r?.[i - q]?.n === n) {
  48.                     tempCount += 1;
  49.                 } else {
  50.                     break;
  51.                 }
  52.             }
  53.    
  54.             return tempCount;
  55.         })();
  56.        
  57.         const current = {
  58.             num: n,
  59.             count,
  60.             countWithNextDelete,
  61.             countWithPrevDelete
  62.         };
  63.    
  64.         r.push(current);
  65.         return r;
  66.     }, []).map(item => Math.max(item.countWithNextDelete, item.countWithPrevDelete)));
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement