题解 | #刷墙#

刷墙

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;
  }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务