G
N
I
D
A
O
L

给你一个长度为 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
  2. 最大值 - 最小值 + 1 == 该区间的长度

则结果加一。

# 代码

a
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;
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝