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
Sof'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
Smonotone increasing.
Example 1:
Input: "00110" Output: 1 Explanation: We flip the last digit to get 00111.
思路:第一趟遍历,记录字符串中0的个数,即当全部翻转为1需要的次数。
第二次遍历,从零位开始,每当这位为1,将sum+1,这位为0,sum-1,即基于之前的sum,将第i位(包括i)之前为0,之后为1需要翻转的次数,每次的sum都与前一个sum正好差1,记录出所有sum中最小的即为结果。
class Solution {
public:
int minFlipsMonoIncr(string S) {
int sum=0,smax=20005;
int l=S.length();
for(int i=0;i<l;i++)
{
if(S[i]!='1') sum++;
}
smax=sum;
for(int i=0;i<l;i++)
{
if(S[i]=='0') sum--;
else sum++;
if(sum<smax) smax=sum;
}
return smax;
}
};
本文介绍了一种算法,用于计算将任意由'0'和'1'组成的字符串转换为单调递增字符串所需的最少翻转次数。通过两次遍历字符串,首次统计'0'的数量,第二次遍历计算在保持单调递增条件下,每一步可能的翻转次数,最终找到全局最小值。
313

被折叠的 条评论
为什么被折叠?



