zoukankan      html  css  js  c++  java
  • LC 926. Flip String to Monotone Increasing

    A string of '0's and '1's is monotone increasing if it consists of some number of '0's (possibly 0), followed by some number of '1's (also possibly 0.)

    We are given a string S of '0's and '1's, and we may flip any '0' to a '1' or a '1' to a '0'.

    Return the minimum number of flips to make S monotone increasing.

    Example 1:

    Input: "00110"
    Output: 1
    Explanation: We flip the last digit to get 00111.
    

    Example 2:

    Input: "010110"
    Output: 2
    Explanation: We flip to get 011111, or alternatively 000111.
    

    Example 3:

    Input: "00011000"
    Output: 2
    Explanation: We flip to get 00000000.
    

    Note:

    1. 1 <= S.length <= 20000
    2. S only consists of '0' and '1' characters.

    Runtime: 19 ms, faster than 17.65% of Java online submissions for Flip String to Monotone Increasing.

    package date20190116;
    
    public class flipstringtomonoincreasing926 {
    
    
      public static int minFlipsMonoIncr(String S) {
        int[][] lefttoright = new int[S.length()][2];
        lefttoright[0][0] = S.charAt(0) == '0' ? 0 : 1;
        for(int i=1; i<S.length(); i++){
          lefttoright[i][0] = (S.charAt(i) == '0' ? 0 : 1) + lefttoright[i-1][0];
        }
        lefttoright[S.length()-1][1] = S.charAt(S.length()-1) == '1' ? 0 : 1;
        for(int i=S.length()-2; i>=0; i--){
          lefttoright[i][1] = (S.charAt(i) == '1' ? 0 : 1) + lefttoright[i+1][1];
        }
    //    for(int[] x : lefttoright){
    //      System.out.print(x[0] + " ");
    //    }
        int ret = S.length();
        for(int i=0; i<S.length()-1; i++){
          ret = Math.min(ret, lefttoright[i][0]+lefttoright[i+1][1]);
        }
        ret = Math.min(ret, lefttoright[0][1]);
        ret = Math.min(ret, lefttoright[S.length()-1][0]);
        return ret;
      }
      public static void main(String[] args){
        String s = "00011000";
        minFlipsMonoIncr(s);
    
      }
    }

    another solution

    Runtime: 12 ms, faster than 68.98% of Java online submissions for Flip String to Monotone Increasing.

    class Solution {
        public int minFlipsMonoIncr(String S) {
          int[] dp = new int[S.length()+1];
          int N = S.length();
          for(int i=0; i < N; i++){
            dp[i+1] = dp[i] + (S.charAt(i) == '1' ? 1 : 0);
          }
          int ans = Integer.MAX_VALUE;
          for(int i=0; i<N+1; i++){
            ans = Math.min(ans, dp[i] + N-i - (dp[N] - dp[i]));
          }
          return ans;
        }
      
    }
  • 相关阅读:
    Centos安装mysql
    @autowired注解报错原因及解决办法
    注解@Resource与@Autowired的区别
    SpringBoot三种获取Request和Response的方法
    oss 上传图片、下载 中文名称
    git tags 和 Branches的区别是什么呀,什么时候应该创建一个Tag?
    git使用命令,git checkout -b a 与 git branch a区别
    PostgreSQL-With子句实现递归
    redisson锁 tryLock的使用及正确用法
    mysql any 和in 函数的使用
  • 原文地址:https://www.cnblogs.com/ethanhong/p/10276597.html
Copyright © 2011-2022 走看看