给你一个长度为 n 、下标从 1 开始的二进制字符串,所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位(即,将 0 变为 1 )。
给你一个下标从 1 开始的整数数组 flips ,其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。
二进制字符串 前缀一致 需满足:在第 i 步之后,在 闭 区间 [1, i] 内的所有位都是 1 ,而其他位都是 0 。
返回二进制字符串在翻转过程中 前缀一致 的次数。
题目链接:https://leetcode.cn/problems/number-of-times-binary-string-is-prefix-aligned/
# 解题思路
贪心:
枚举数组区间 [0, i] ,如果该区间上满足:
- 最小值为 1
 最大值 - 最小值 + 1 == 该区间的长度
则结果加一。
# 代码
class Solution {  | |
public int numTimesAllBlue(int[] flips) {  | |
int n = flips.length;  | |
boolean one = false;  | |
int max = 0;  | |
int cnt = 0;  | |
for (int i = 0; i < n; ++i) {  | |
if (!one && flips[i] == 1) one = true;  | |
if (max < flips[i]) max = flips[i];  | |
            // 最小值为 1,且 max - min + 1 == 子数组的长度 | |
if (one && max == i + 1) ++cnt;  | |
        } | |
return cnt;  | |
    } | |
} |