天天看點

C++描述 LeetCode 1769. 移動所有球到每個盒子所需的最小操作數

C++描述 LeetCode 1769. 移動所有球到每個盒子所需的最小操作數

  大家好,我叫亓官劼(qí guān jié )

有 ​

​n​

​​ 個盒子。給你一個長度為 ​

​n​

​​ 的二進制字元串 ​

​boxes​

​​ ,其中 ​

​boxes[i]​

​​ 的值為 ​

​'0'​

​​ 表示第 ​

​i​

​ 個盒子是 空 的,而 ​

​boxes[i]​

​​ 的值為 ​

​'1'​

​ 表示盒子裡有 一個 小球。

在一步操作中,你可以将 一個 小球從某個盒子移動到一個與之相鄰的盒子中。第 ​

​i​

​​ 個盒子和第 ​

​j​

​​ 個盒子相鄰需滿足 ​

​abs(i - j) == 1​

​ 。注意,操作執行後,某些盒子中可能會存在不止一個小球。

傳回一個長度為 ​

​n​

​​ 的數組 ​

​answer​

​​ ,其中 ​

​answer[i]​

​​ 是将所有小球移動到第 ​

​i​

​ 個盒子所需的 最小 操作數。

每個 ​

​answer[i]​

​ 都需要根據盒子的 初始狀态 進行計算。

示例 1:

輸入:boxes = "110"
輸出:[1,1,3]
解釋:每個盒子對應的最小操作數如下:
1) 第 1 個盒子:将一個小球從第 2 個盒子移動到第 1 個盒子,需要 1 步操作。
2) 第 2 個盒子:将一個小球從第 1 個盒子移動到第 2 個盒子,需要 1 步操作。
3) 第 3 個盒子:将一個小球從第 1 個盒子移動到第 3 個盒子,需要 2 步操作。将一個小球從第 2 個盒子移動到第 3 個盒子,需要 1 步操作。共計 3 步操作。      

示例 2:

輸入:boxes = "001011"
輸出:[11,8,5,4,3,4]      
  • ​n == boxes.length​

  • ​1 <= n <= 2000​

  • ​boxes[i]​

    ​​ 為 ​

    ​'0'​

    ​​ 或 ​

    ​'1'​

題解思路

算法實作

class Solution {
public:
    vector<int> minOperations(string boxes) {
        int len = boxes.size();
        vector<int> res(len);
        for(int i = 0; i < len; i++){
            res[i] = 0;
            for(int j = 0 ; j < len; j++)
                if(boxes[j] == '1')
                    res[i] += abs(j-i);
        }
        return res;
    }
};      

繼續閱讀