LeetCode 5686. 移动所有球到每个盒子所需的最小操作数

题意:

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,
其中 boxes[i] 的值为 '0' 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 '1' 表示盒子里有 一个 小球。

在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。
第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。

返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。

每个 answer[i] 都需要根据盒子的 初始状态 进行计算。

数据范围:
n == boxes.length
1 <= n <= 2000
boxes[i]'0''1'

解法:

发现n只有2000,那么对于每个i,暴力计算所有j移动到i的代价即可.
复杂度O(n^2)

code:

class Solution {
     
public:
    vector<int> minOperations(string s) {
     
        int n=s.size();
        vector<int>ans(n,0);
        for(int i=0;i<n;i++){
     
            for(int j=0;j<n;j++){
     
                ans[i]+=abs(i-j)*(s[j]=='1');
            }
        }
        return ans;
    }
};

你可能感兴趣的:(LeetCode 5686. 移动所有球到每个盒子所需的最小操作数)