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;
}
};