网易首页 > 网易号 > 正文 申请入驻

从O(n²)暴跌至O(n):1个max公式如何破解二进制重排

0
分享至

O(n)。这是解决“二进制字符串每秒转换”问题的最优时间复杂度。给定一个只包含'0'和'1'的字符串,每秒所有子串“01”会同时替换为“10”,要求计算直到字符串中不存在“01”为止所需的秒数。你会选择直观的逐秒模拟,还是接受一次遍历就得出答案的巧妙算法?

模拟派总是先动手:维护字符串,每轮扫描所有位置,遇到“01”就标记,然后批量替换,直到结束。这种做法直击问题定义,易于验证,但在数据规模面前显得笨拙。设想字符串长度达到数万,每秒钟都可能产生大量替换,最坏情况下循环轮数可能接近原串长度,整体时间接近O(n²)。更糟糕的是,多个“1”之间的互相阻塞会使模拟的轮数远超直觉预期,内存中对字符串的频繁重写也让性能雪上加霜。

优化派则抓住一个本质:每个“1”最终都要向左穿越它前面的所有“0”。如果只是确认最终位置,似乎每个“1”需要的秒数就等于它前方“0”的个数——但问题在于,“1”不能相互超越,它们必须排队通行。这种排队带来的延迟,恰恰是理解O(n)解法的关键。

在线性扫描算法中,我们只维护两个变量:zeros记录当前已遍历的“0”的个数,time则是处理到当前位置时所需的累积秒数。从头开始逐个字符扫描:遇到“0”就递增zeros;遇到“1”且zeros大于0时,利用公式 time = max(time + 1, zeros) 更新time。最终得到的time就是答案。遍历一遍,时间复杂度O(n),空间仅用了两个整型变量,堪称极致。

初看这段代码,多数人会立即抛出几个问题:zeros到底在积累什么?为什么只在遇到“1”时才更新time?又为什么更新时用max(time+1, zeros)这么曲折的方式,而不是直接time = zeros?time+1代表着什么?为什么这个线性扫描能避免模拟每一秒?让我们逐个拆解。

zeros作为一个计数器,它的真实含义是“当前已出现、但尚未被某个'1'彻底跨越的'0'的数量”。在遍历过程中,每当碰到一个“0”,意味着未来会有“1”需要从它上面越过,所以计数增加。直到某个“1”真的开始移动并最终通过它,这种“待跨越”的状态才会消除。

但在算法里我们并不显式扣减zeros,因为最终答案已经交织在time中。实际上,zeros会在整个遍历过程中持续增加,因为它后面的“0”对更后面的“1”来说,仍然是障碍物。zeros只积累不减少,却不会导致time失真,正是因为time通过max动态权衡了排队与障碍两股力量。

time代表当前已处理的“1”完成全部移动所需的最少秒数。第一个“1”出现时,没有任何前面“1”的阻挡,它只需要跨过此前积累的所有zeros个“0”,所以理论上time=zeros。但随后每个新“1”的加入,情况就变得不同了:它既要跨过自己前面的“0”,又要尊重前面“1”的移动节奏——因为所有“1”在每秒内都只能整体将每个“0”向左推一个位置,“1”之间不能穿行。

这就引出了time+1的含义:当一个新的“1”准备出发时,它必须排在最近一个“1”完成全部移动的时刻之后再加1秒。因为它至少需要比前一个“1”晚1秒才能开始移动(否则就穿过了前车)。但与此同时,它自己的障碍物数量也可能很大:如果前面堆积的zeros足够多,跨越这些0本身就需要zeros秒,可能大于time+1。所以实际需要的秒数取两者中的最大值:time = max(time + 1, zeros)。

当zeros较少而排队阻塞严重时,time+1会主导更新,体现串行等待;当zeros很多而排队相对宽松时,zeros直接接管,体现跨越障碍的硬需求。这种二选一的逻辑,把逐秒模拟中繁琐的“碰撞检测”压缩为一次max判断。一次遍历结束时,time就是全局答案,全程无需真实模拟任何一秒,因为每个“1”的最终时刻已经被公式精确推演出来。这正是O(n)解法的精髓,也是那个max公式让人一再回味的原因。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
世界杯在即!德保罗演唱会抽电子烟引发阿根廷球迷强烈不满

世界杯在即!德保罗演唱会抽电子烟引发阿根廷球迷强烈不满

星耀国际足坛
2026-06-01 23:49:38
释永信在监狱能申请吃素不能

释永信在监狱能申请吃素不能

熊太行
2026-05-30 14:45:23
“都绝户了,还拼命挣钱干嘛?”看见父亲50岁就躺平,我崩溃了

“都绝户了,还拼命挣钱干嘛?”看见父亲50岁就躺平,我崩溃了

素十三儿
2026-04-13 07:12:36
35岁厨师长相亲21岁女孩,对40岁丈母娘心动!网友:这眼光,绝了

35岁厨师长相亲21岁女孩,对40岁丈母娘心动!网友:这眼光,绝了

小邵说剧
2026-06-02 08:26:10
直到伊朗下令轰炸美空军基地,全世界才惊觉:中国有句话说得很对

直到伊朗下令轰炸美空军基地,全世界才惊觉:中国有句话说得很对

福建睿平
2026-06-02 10:05:09
莫言:如果你混到没人找你吃饭,没人喊你聚会,连电话也没几个,那庆祝了,你不是人缘变差,而是真正觉醒了

莫言:如果你混到没人找你吃饭,没人喊你聚会,连电话也没几个,那庆祝了,你不是人缘变差,而是真正觉醒了

品读时刻
2026-05-27 09:00:58
中超夏窗还没开,6名外援已确定离队!泰山海港各一人

中超夏窗还没开,6名外援已确定离队!泰山海港各一人

酷侃体坛
2026-06-02 09:16:48
5%永久分红有多恐怖?每年赚3.3亿美元!一纸合约让乔丹永久躺赚

5%永久分红有多恐怖?每年赚3.3亿美元!一纸合约让乔丹永久躺赚

青橘罐头
2026-05-26 22:10:56
特朗普无法接受,誓要吞并的“第51州”,扭头让中国成了最大赢家

特朗普无法接受,誓要吞并的“第51州”,扭头让中国成了最大赢家

闻识
2026-06-01 21:44:26
当不成总统了?特朗普体检报告出来了,快80岁的他,恐被迫下台

当不成总统了?特朗普体检报告出来了,快80岁的他,恐被迫下台

走进事件的中心
2026-06-02 11:19:55
瑞幸HelloKitty联名款被曝写错字!网友:世界就是个巨大的草台班子

瑞幸HelloKitty联名款被曝写错字!网友:世界就是个巨大的草台班子

大象新闻
2026-06-02 10:15:05
俄乌战争,如果俄罗斯最终赢了,你我在有生之年很可能会亲历战争

俄乌战争,如果俄罗斯最终赢了,你我在有生之年很可能会亲历战争

混沌录
2026-05-29 23:26:12
李善长被处死时已年近80,每天耕地种田,朱元璋为何非要斩他满门

李善长被处死时已年近80,每天耕地种田,朱元璋为何非要斩他满门

千秋文化
2025-12-27 21:50:26
肖纯锦临刑在即,其妻哭求陈毅,一通电话救下昔日恩人

肖纯锦临刑在即,其妻哭求陈毅,一通电话救下昔日恩人

唠叨说历史
2026-03-28 15:04:59
CCTV5直播!上午8点30分!NBA总决赛G1来袭,文班和大头再续恩怨

CCTV5直播!上午8点30分!NBA总决赛G1来袭,文班和大头再续恩怨

球盲百小易
2026-06-02 00:52:56
排名或跌出前150!郑钦文递补拿到女王杯资格 去年4强+需保195分

排名或跌出前150!郑钦文递补拿到女王杯资格 去年4强+需保195分

风过乡
2026-06-02 07:34:29
金主追着投!追觅科技估值700亿 官方回应开放融资:雷军靠俞浩大赚28亿 翻了200倍

金主追着投!追觅科技估值700亿 官方回应开放融资:雷军靠俞浩大赚28亿 翻了200倍

快科技
2026-06-02 09:22:07
塞维利亚股东:拉莫斯欺骗了我们,收购是数月前策划好的骗局

塞维利亚股东:拉莫斯欺骗了我们,收购是数月前策划好的骗局

懂球帝
2026-06-01 21:26:42
董路:杨毅一年赚3000万!中国篮球迷比足球迷活得好 消费能力强

董路:杨毅一年赚3000万!中国篮球迷比足球迷活得好 消费能力强

念洲
2026-06-01 23:03:19
1.2万亿顺差创百年纪录,张燕生却警告:再赚下去,中国要有麻烦

1.2万亿顺差创百年纪录,张燕生却警告:再赚下去,中国要有麻烦

趣文说娱
2026-05-29 20:13:52
2026-06-02 12:28:49
字节漫游指南
字节漫游指南
有态度网友ytd
5662文章数 54关注度
往期回顾 全部

科技要闻

英伟达RTX Spark 很猛,但首批机型不便宜

头条要闻

英国教授来中国考察被震撼:堪称人类史上最伟大功绩

头条要闻

英国教授来中国考察被震撼:堪称人类史上最伟大功绩

体育要闻

1米74的业余联赛替补,在英超踢中卫

娱乐要闻

奚梦瑶何猷君婚礼曝光 深情热吻甜蜜

财经要闻

锂电“资源墙”高筑 全球性长期博弈开始

汽车要闻

星途神秘新车轮廓曝光 又一款性能SUV要来了?

态度原创

时尚
数码
游戏
旅游
房产

安妮海瑟薇40岁后美出新高度, 开挂的关键原来是这个

数码要闻

华为nova 16系列发布:2999元起 全系配备后置红枫原色镜头

《波斯王子:失落的王冠》国行版咪咕游戏开启预售,早鸟价7折抢先入手

旅游要闻

行进中国|长江夜未央 遇见无处不在

房产要闻

100亿!1371亩!海口城市更新,再爆超级项目!

无障碍浏览 进入关怀版