1769.移动所有球到每个盒子所需的最小操作数
链接:1769.移动所有球到每个盒子所需的最小操作数
难度:Medium
标签:数组、字符串
简介:返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。
题解 1 - cpp
- 编辑时间:2022-12-02
- 执行用时:76ms
- 内存消耗:8.6MB
- 编程语言:cpp
- 解法介绍:先统计右侧所有的点和数量,每次移动时快速计算左侧 1 数量和右侧 1 数量。
class Solution {
public:
    vector<int> minOperations(string boxes) {
        int n = boxes.size(),
            lsum = 0, lcnt = 0,
            rsum = 0, rcnt = 0;
        vector<int> list(n);
        for (int i = 0; i < n; i++) {
            if (boxes[i] == '1') {
                rsum += i;
                rcnt += 1;
            }
        }
        list[0] = rsum;
        for (int i = 1; i < n; i++) {
            if (boxes[i - 1] == '1') rcnt--, lcnt++;
            rsum -= rcnt;
            lsum += lcnt;
            list[i] = lsum + rsum;
        }
        return list;
    }
};