問題描述:
有 n 個盒子。給你一個長度為 n 的二進(jìn)制字符串 boxes ,其中 boxes[i] 的值為 ‘0’ 表示第 i 個盒子是 空 的,而 boxes[i] 的值為 ‘1’ 表示盒子里有 一個 小球。
在一步操作中,你可以將 一個 小球從某個盒子移動到一個與之相鄰的盒子中。第 i 個盒子和第 j 個盒子相鄰需滿足 abs(i - j) == 1 。注意,操作執(zhí)行后,某些盒子中可能會存在不止一個小球。
返回一個長度為 n 的數(shù)組 answer ,其中 answer[i] 是將所有小球移動到第 i 個盒子所需的 最小 操作數(shù)。
每個 answer[i] 都需要根據(jù)盒子的 初始狀態(tài) 進(jìn)行計(jì)算。
樣例如下:
代碼如下:(采用簡單模擬即可,具體看注釋)
import java.util.Arrays;
public class MinOperations {//有 n 個盒子。給你一個長度為 n 的二進(jìn)制字符串 boxes ,
// 其中 boxes[i] 的值為 '0' 表示第 i 個盒子是 空 的,而 boxes[i] 的值為 '1' 表示盒子里有 一個 小球。
//在一步操作中,你可以將 一個 小球從某個盒子移動到一個與之相鄰的盒子中。第 i 個盒子和第 j 個盒子相鄰需滿足 abs(i - j) == 1 。
// 注意,操作執(zhí)行后,某些盒子中可能會存在不止一個小球。
//返回一個長度為 n 的數(shù)組 answer ,其中 answer[i] 是將所有小球移動到第 i 個盒子所需的 最小 操作數(shù)。
//每個 answer[i] 都需要根據(jù)盒子的 初始狀態(tài) 進(jìn)行計(jì)算。
public static int[] minOperations(String boxes) {//簡單模擬即可
int[] answer = new int[boxes.length()];
for (int i = 0; i< boxes.length(); i++) {int temp = 0;
for (int j = 0; j< i; j++) {//尋找當(dāng)前節(jié)點(diǎn)前面的小球
if (boxes.charAt(j)=='1') temp += (i-j);
}
for (int j = i+1; j< boxes.length(); j++) {//尋找當(dāng)前節(jié)點(diǎn)后面的小球
if (boxes.charAt(j)=='1') temp += (j-i);
}
answer[i] = temp;
}
return answer;
}
public static void main(String[] args) {System.out.println(Arrays.toString(minOperations("110")));
System.out.println(Arrays.toString(minOperations("001011")));
}
}
結(jié)果如下:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧