1. 程式人生 > >leetcode 926. Flip String to Monotone Increasing

leetcode 926. Flip String to Monotone Increasing

給定一個由 0 和 1 組成的序列 A ,問至少翻轉多少個 0 和 1 使得該序列前部分都是 0 後部分都是 1.

思路:列舉0和1的分界點,代價可以O(1)的算出來,只需要預處理出序列A中一開始有幾個0即可,代價就是當前掃過的1的個數加上後面的0的個數

class Solution {
public:
    int minFlipsMonoIncr(string S) {
        int len = S.length();
        int zoro=0,one=0;
        for(int i = 0; i < len; i++){
            if(S[i]=='0') zoro++;
        }
        int ans = min(9999999,one+zoro);
        for(int i = 0; i <len; i++)
        {
            if(S[i]=='0') zoro--;
            else one++;
            ans=min(ans,zoro+one);
        }
        return ans;
    }
};