• 1375. 二进制字符串前缀一致的次数-前序遍历法


    1375. 二进制字符串前缀一致的次数

    给你一个长度为 n 、下标从 1 开始的二进制字符串,所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位(即,将 0 变为 1)。

    给你一个下标从 1 开始的整数数组 flips ,其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。

    二进制字符串 前缀一致 需满足:在第 i 步之后,在 闭 区间 [1, i] 内的所有位都是 1 ,而其他位都是 0 。

    返回二进制字符串在翻转过程中 前缀一致 的次数。

    示例 1:

    输入:flips = [3,2,4,1,5]
    输出:2
    解释:二进制字符串最开始是 “00000” 。
    执行第 1 步:字符串变为 “00100” ,不属于前缀一致的情况。
    执行第 2 步:字符串变为 “01100” ,不属于前缀一致的情况。
    执行第 3 步:字符串变为 “01110” ,不属于前缀一致的情况。
    执行第 4 步:字符串变为 “11110” ,属于前缀一致的情况。
    执行第 5 步:字符串变为 “11111” ,属于前缀一致的情况。
    在翻转过程中,前缀一致的次数为 2 ,所以返回 2 。

    示例 2:

    输入:flips = [4,1,2,3]
    输出:1
    解释:二进制字符串最开始是 “0000” 。
    执行第 1 步:字符串变为 “0001” ,不属于前缀一致的情况。
    执行第 2 步:字符串变为 “1001” ,不属于前缀一致的情况。
    执行第 3 步:字符串变为 “1101” ,不属于前缀一致的情况。
    执行第 4 步:字符串变为 “1111” ,属于前缀一致的情况。
    在翻转过程中,前缀一致的次数为 1 ,所以返回 1 。

    这题看似很复杂,千万要理解解题原理,不然暴力去求解,会花费很多时间:

    int numTimesAllBlue(int* flips, int flipsSize){
        int max=flips[0];
        int count=0;
        if(flips[0]==1){
            count++;
        }
        for(int i=1;i<flipsSize;i++){
            if(flips[i]>max){
                max=flips[i];
            }
            if(max==i+1){
                count++;
    
    
            }
        }
        return count;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    SRTP协议与加密原理
    大数据学习(7)-hive文件格式总结
    openstack 环境配置及基础组件安装
    pytorch C++ 移植
    谷本系数/相似度的计算和分子指纹
    【数据结构】堆的拓展延伸 —— 堆排序 和 TopK问题
    猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
    【论文笔记】Transformers in Remote Sensing: A Survey 中的相关论文链接
    java:三层架构
    java-php-python-ssm网上零食进销存计算机毕业设计
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/126154913