给你一个长度为 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; | |
} | |
} |