【每日一题Day42】生成交替二进制字符串的最小操作数 | 模拟 位运算

news2024/11/24 18:38:57

生成交替二进制字符串的最小操作数【LC1758】

You are given a string s consisting only of the characters '0' and '1'. In one operation, you can change any '0' to '1' or vice versa.

The string is called alternating if no two adjacent characters are equal. For example, the string "010" is alternating, while the string "0100" is not.

Return the minimum number of operations needed to make s alternating.

隔离第五天 终于喝到酸奶啦>o<

  • 思路:长度一定的交替二进制字符串有两种可能性,以字符0开头的0101字符串和以字符1开头的1010字符串,因此只需要将字符串s与这两种字符串进行比较,记录不相同的字符个数,最后返回较小值即可

  • 实现:使用异或操作记录该位应是1还是0:flag ^= 1;

    class Solution {
        public int minOperations(String s) {    
            return Math.min(countOperations(s,0),countOperations(s,1));    
        }
        public int countOperations(String s, int flag){
            int n = s.length();
            int count = 0;
            for (int i = 0; i < n; i++){
                if (s.charAt(i) == '0' + flag){
                    count++;
                }
                flag ^= 1;
            }
            return count;
        }
    }
    
    • 复杂度分析

      • 时间复杂度: O ( n ) O(n) O(n),两次遍历字符串s
      • 空间复杂度: O ( 1 ) O(1) O(1)

      image-20221129093115019

  • 优化:变成这两种不同的交替二进制字符串所需要的最少操作数加起来等于 s的长度,我们只需要计算出变为其中一种字符串的最少操作数,就可以推出另一个最少操作数,然后取最小值即可。

    class Solution {
        public int minOperations(String s) {
            int n = s.length();
            int n0 = countOperations(s,0);     
            return Math.min(n-n0, n0);    
        }
        public int countOperations(String s, int flag){
            int n = s.length();
            int count = 0;
            for (int i = 0; i < n; i++){
                if (s.charAt(i) == '0' + flag){
                    count++;
                }
                flag ^= 1;
            }
            return count;
        }
    }
    
    • 复杂度分析

      • 时间复杂度: O ( n ) O(n) O(n),一次遍历字符串s,
      • 空间复杂度: O ( 1 ) O(1) O(1)

      但是还没第一种快

      image-20221129093140505

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马点评--用户签到

用户签到 BitMap用法签到功能签到统计 BitMap用法&#xff1a; 我们按月来统计用户签到信息&#xff0c;签到记录为1&#xff0c;未签到则记录为0.&#xff08;布隆过滤器就是采用这种结构&#xff09; 把每一个bit位对应当月的每一天&#xff0c;形成了映射关系。用0和1标示…

docker的安装

1、docker官网 Install Docker Engine on CentOS | Docker Documentation yum -y install gcc yum -y install gcc-c yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum insta…

原型(克隆)模式

文章目录思考原型(克隆)模式1.原型模式的本质2.何时选用原型模式3.优缺点4.实现原型模式(浅克隆)原型模式(深克隆)java浅克隆java深克隆思考原型(克隆)模式 原型模式顾名思义通过一个接口实现快速创建对象 1.原型模式的本质 原型模式的本质:克隆生成对象。 克隆是手段&#xff…

【Ubuntu】进程与线程编程实验

文章目录进程与线程实验一&#xff1a;创建进程基础版&#xff1a;创建父子线程 fork基础版&#xff1a;父子线程交替运行基础版&#xff1a;创建进程 文件写入练习版&#xff1a;创建线程 子读父阻塞实验二&#xff1a;线程共享进程中的数据实验三&#xff1a;多线程实现单词统…

总结709(bug集合)

今天不知道怎么了&#xff0c;那个曾弄了我20多天的冒险模块&#xff0c;在今天&#xff0c;差不多要完工了。弄出的那一刻&#xff0c;有的是喜悦&#xff0c;但之后&#xff0c;更多的是叹气。 也就是从此刻我才意识到&#xff0c;我曾自认为很崇高的职位&#xff0c;可能事…

传奇出现黑屏卡屏不动是怎么回事

在写这篇文章之前&#xff0c;先给给大家说一下&#xff0c;这篇文章写的是出现黑屏、卡屏不动是我们玩传奇的时候出现的&#xff0c;而不是在架设传奇时候出现的&#xff0c;所以要特别是注意一下&#xff0c;架设和玩出现黑屏是完全不一样的&#xff0c;所以解决方案也不一样…

驱动开发 platfrom总线驱动的三种方式

驱动的分隔与分离&#xff1a; 对于 Linux 这样一个成熟、庞大、复杂的操作系统&#xff0c;代码的重用性非常重要&#xff0c;在驱动程序&#xff0c;因为驱动程序占用了 Linux 内核代码量的大头&#xff0c;如果不对驱动程序加以管理&#xff0c;任由重复的代码肆意增加&…

基于深度学习的合成孔径雷达自聚焦

文章目录引言什么是合成孔径雷达什么是自聚焦经典自聚焦方法基于机器学习的方法基于极速学习机的方法基于深度学习的SAR自聚焦代码附录引言 本文全面介绍合成孔径雷达自聚焦概念和方法。想获取更为详尽的描述&#xff0c;请参考以下几篇论文, 如果数据或代码对你的研究有用&am…

【ASM】字节码操作 工具类与常用类 ClassRemapper 介绍 类映射 代码混淆

文章目录 1.概述2. ClassRemapper#2.1 class info2.2 fields2.3 构造方法2.4 method3. 案例3.1 案例1-修改类名3.2 案例2-修改字段名和方法3.3 案例3-修改2个类4.总结1.概述 在上一篇文章:【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍 我们知道了,对于Instruc…

[思维模式-5]:《如何系统思考》-1- 认识篇 - 总体结构与知识框架

目录 前言&#xff1a; 第一篇&#xff1a;认知篇 第1章 无所不在的系统 // 2 第2章 思维的转变 // 30 第二篇&#xff1a;方法与工具 第3章 深入思考 // 50 第4章 动态思考 // 78 第5章 全面思考 // 109 第6章 系统思考的“新语言”&#xff1a;因果回路图 // …

Zookeeper(一)- Zookeeper介绍与集群部署

文章目录一、Zookeeper 介绍1. Zookeeper概述2. Zookeeper工作机制3. Zookeeper特点4. Zookeeper数据结构5. Zookeeper应用场景&#xff08;1&#xff09;统一命名服务&#xff08;2&#xff09;统一配置管理&#xff08;3&#xff09;统一集群管理&#xff08;4&#xff09;服…

翻译QT使用手册:将库添加到项目

将库添加到项目 除了 Qt 库之外&#xff0c;您还可以将其他库添加到您的项目中。该过程取决于图书馆的类型和位置。您可以添加系统库、您自己的库或第三方库。该库可以位于当前项目的构建树中&#xff0c;也可以位于另一个构建树中。 将库添加到项目 除了 Qt 库之外&#xff0c…

远距离双目视觉测量系统纵深方向测量精度较低原因分析

两台相机基线距离约1200mm&#xff0c;对20m外的一个LED发光点进行持续观测&#xff0c;效果如下视频所示&#xff1a; 可见ZZZ方向的重复性精度比较差&#xff0c;波动量甚至多于2mm了&#xff0c;而以10mm导轨基准距离为基准&#xff0c;精度测试结果也比较差&#xff0c;如…

[附源码]计算机毕业设计springboot个性化产品服务管理系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

xss-labs/level11

首先输入 <script>alert(xss)</script> 丝毫不差 没有出现回弹现象 根本就不出人意料好吧 接着来看一下源代码好吧 能够看得出来第一个输出点由于htmlspecialchars转义操作 所以上述代码根本行不通 这一关比上一关又多了一个隐藏表单 一共是有四个隐藏表单 从…

C++入门笔记

C 入门笔记Functions in CC header Files下面主要是我学习C的一个笔记&#xff0c;记录学习中遇到的一些重点事项。下面是视频的连接https://www.bilibili.com/video/BV1Ay4y1i7Z6/?p10&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourcee6e…

单连通图的判断

单连通图的判断算法&#xff1a; &#xff08;1&#xff09;对每个点进行dfs得到一棵dfs树&#xff1b; &#xff08;2&#xff09;判断是否存在前向边和横向边&#xff0c;若有则必定存在两个点之间有至少2条简单路径&#xff0c;因此该图不属于单连通图&#xff1b; &#xf…

一个开源且完全自主开发的国产网络协议栈

已剪辑自: https://mp.weixin.qq.com/s/_1LE7mGc9mRuajRgNsyirQ onps是一个开源且完全自主开发的国产网络协议栈&#xff0c;适用于资源受限的单片机系统&#xff0c;提供完整地ethernet/ppp/tcp/ip协议族实现&#xff0c;同时提供sntp、dns、ping等网络工具&#xff0c;支持以…

mac pro M1(ARM)安装:.Net、C#开发环境

0.引言 因为.Net是开发、运行环境&#xff0c;而C#是一个编程语言&#xff0c;专用于.Net平台&#xff0c;C#是运行在.Net之上的&#xff0c;所以两者的安装是密不可分的 1. 安装 1、因为arm架构安装Visual Studio 2022 for mac可以自动附带安装.Net&#xff0c;所以我们只需…

刷题之完全二叉树的权值和小字辈及根据后序和中序遍历输出先序遍历

1、完全二叉树的权值 1&#xff09;题目 给定一棵包含 N 个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从 上到下、从左到右的顺序依次是 A1, A2, AN&#xff0c;如下图所示&#xff1a; 现在小明要把相同深度的节点的权值加在一起&#xff0c;他想…