题解 | #刷墙#
刷墙
http://www.nowcoder.com/practice/748b891f208744a7b1f98cb4c45bde11
题比较坑
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine().trim());
String line = br.readLine().trim();
int[] nums = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = line.charAt(i) - '0';
}
if (N <= 0) System.out.println(0);
else System.out.println(doIt(N, nums));
}
static int doIt(int N, int[] nums) {
int[] temp = new int[N];
temp[0] = nums[0];
for (int i = 1; i < N; i++) {
temp[i] = temp[i - 1] + nums[i];
}
// temp 保存 0 ~ i 区间的 1 的总和
int ans = Math.min(temp[N - 1], N - temp[N - 1]);
// ans 为 蓝->红 或 红->蓝 的最小值
for (int i = 0; i < N; i++) {
// i + 1 - temp[i] : 0 到 i 左边 0 的个数
// 左边总元素个数减去 temp 的 i 对应 1 的值
// temp[n - 1] - temp[i] 为 右边 1 的个数
ans = Math.min(ans, i + 1 - temp[i] + temp[N - 1] - temp[i]);
}
return ans;
}
}