解题思路
先求出第0个盒子的最小操作数
遍历box,动态改变当前位置左右的1的个数
当前位置的操作数等于前一个位置的操作数+左边1的个数-右边1的个数 如果当前位置是1 还需要减1
代码
/**
* @param {string} boxes
* @return {number[]}
*/
var minOperations = function(boxes) {
let box=boxes.split('');
let arr=[];
let sum=0;
let left=0,right=0;//初始化左右1的个数
for(let i =1;i<box.length;i++){//求出位置0的最小操作数 和右边1的个数
let n=box[i]=='1'?1:0;
right = right+n;
sum=sum+i*n;
}
arr[0]=sum;
//遍历box,求出每个位置的最小操作数
for(let i=1;i<box.length;i++){
if(box[i-1]=='1'){left++;}
if(box[i]=='1'){right--;}
arr[i]=arr[i-1]+left-right;
arr[i]=box[i]=='1'?arr[i]-1:arr[i]
}
return arr;
};