当前位置: 首页 > wzjs >正文

朝阳网站推广主域名进入网站

朝阳网站推广,主域名进入网站,wordpress数据库修改后台网址,知名企业网站大全二进制字符串替换问题:计算消除 "01" 所需秒数 题目描述 给定一个二进制字符串 s,每秒将所有子字符串 "01" 同时替换为 "10",直到字符串中不再存在 "01"。求完成这个过程所需的秒数。 输入输出示…

二进制字符串替换问题:计算消除 "01" 所需秒数

题目描述

给定一个二进制字符串 s,每秒将所有子字符串 "01" 同时替换为 "10",直到字符串中不再存在 "01"。求完成这个过程所需的秒数。

输入输出示例

输入

s = "0101"

输出

2

解释

  • 第 1 秒:"0101" → "1010"
  • 第 2 秒:"1010" → "1100"

解题思路分析

1. 暴力模拟法

最直观的思路是模拟替换过程:

  1. 遍历字符串,找到所有 "01" 并替换为 "10"
  2. 每次替换后秒数加 1。
  3. 重复上述步骤,直到字符串不再变化。

优点:实现简单,逻辑清晰。
缺点:时间复杂度较高,最坏情况下为 O (n²)。

2. 数学规律优化

观察发现:

  • 每个 '0' 需要向右移动的次数等于其右侧连续 '1' 的数量。
  • 总秒数等于所有 '0' 右侧连续 '1' 数量的最大值。

示例分析

s = "0101"
  • 第一个 '0' 右侧有 1 个 '1' → 需 1 秒。
  • 第二个 '0' 右侧有 2 个 '1' → 需 2 秒。
  • 总秒数为 2。

优点:时间复杂度 O (n)。
缺点:需要理解并推导出数学规律。

代码实现(Java)

方法一:暴力模拟法

class Solution {public int secondsToRemoveOccurrences(String s) {int seconds = 0;boolean hasChanged;char[] chars = s.toCharArray();do {hasChanged = false;for (int i = 0; i < chars.length - 1; i++) {if (chars[i] == '0' && chars[i + 1] == '1') {// 交换 '0' 和 '1'chars[i] = '1';chars[i + 1] = '0';hasChanged = true;// 跳过下一个位置,避免重复处理i++;}}if (hasChanged) {seconds++;}} while (hasChanged);return seconds;}
}

方法二:数学规律法

class Solution {public int secondsToRemoveOccurrences(String s) {int seconds = 0;int ones = 0; // 当前累积的连续 '1' 数量for (char c : s.toCharArray()) {if (c == '0') {// 当前 '0' 需要等待 ones 秒才能移动seconds = Math.max(seconds, ones);} else {ones++;}}return seconds;}
}

代码逐行解析

方法一:暴力模拟法

  1. 初始化变量

    • seconds:记录总秒数。
    • hasChanged:标记本次是否发生替换。
    • chars:将字符串转换为字符数组以便修改。
  2. 循环处理

    • 使用 do-while 确保至少执行一次替换。
    • 遍历字符数组,找到 "01" 并交换为 "10"
    • 每次交换后跳过下一个位置(i++),避免重复处理。
  3. 更新秒数

    • 若发生替换,seconds 加 1。

方法二:数学规律法

  1. 遍历字符
    • 遇到 '0' 时,记录当前累积的连续 '1' 数量 ones,并更新最大秒数。
    • 遇到 '1' 时,累积 ones

复杂度分析

方法时间复杂度空间复杂度
暴力模拟法O(n²)O(n)
数学规律法O(n)O(1)

常见问题解答

Q1:为什么暴力模拟法的时间复杂度是 O (n²)?

最坏情况下(如 "010101..."),每次只能处理一个 "01",需要进行 O (n) 次遍历,每次遍历 O (n) 时间。

Q2:数学规律法的正确性如何证明?

  • 每个 '0' 必须等待其右侧的所有 '1' 全部移动到左边后,才能移动。
  • 例如,"011" 中的 '0' 需要 2 秒才能移动到最后。

Q3:为什么字符数组比字符串更高效?

字符串是不可变对象,每次修改会生成新实例。字符数组支持原地修改,减少内存开销。

测试用例

输入输出说明
"01"1一次替换即可
"10"0初始无 "01"
"010101"3每个 '0' 需要移动 3 次
"111000"0初始无 "01"
"0"0空字符串

总结

本题通过两种方法实现:

  1. 暴力模拟法:直观易懂,适合小规模输入。
  2. 数学规律法:高效优化,适合大规模输入。

实际开发中需根据场景选择合适方法。掌握字符串处理技巧和数学规律推导能力,对解决类似问题至关重要。如果您有任何疑问或建议,欢迎在评论区交流! 🚀


文章转载自:

http://1OxiSBJO.dpsfz.cn
http://mTP4guns.dpsfz.cn
http://PEjUoSt3.dpsfz.cn
http://eoDSa3VH.dpsfz.cn
http://rhq7YLFU.dpsfz.cn
http://Oo4dyqdW.dpsfz.cn
http://9jqKCNES.dpsfz.cn
http://DqpP0n1B.dpsfz.cn
http://Wua6i0gA.dpsfz.cn
http://zVgVKu0W.dpsfz.cn
http://cAsreqyM.dpsfz.cn
http://ZbHHA5il.dpsfz.cn
http://w2m5rNTJ.dpsfz.cn
http://icShArCg.dpsfz.cn
http://mNc0KK6M.dpsfz.cn
http://aSVRfebE.dpsfz.cn
http://1y21IxuY.dpsfz.cn
http://jf9JjK1H.dpsfz.cn
http://R7y6KpJn.dpsfz.cn
http://TDB43hDr.dpsfz.cn
http://TKvJhzP4.dpsfz.cn
http://agumT1Ut.dpsfz.cn
http://OlF4ny6e.dpsfz.cn
http://srTP6F0c.dpsfz.cn
http://ftZwWIum.dpsfz.cn
http://wgq2Fk5I.dpsfz.cn
http://wmBMBhHk.dpsfz.cn
http://OvoSKb14.dpsfz.cn
http://k0ZqvkcP.dpsfz.cn
http://dBXy1WyU.dpsfz.cn
http://www.dtcms.com/wzjs/699456.html

相关文章:

  • 用html制作网站流程搭建小程序公司
  • 深圳罗湖医疗集团网站建设wordpress 安卓 管理系统
  • 淘宝上做网站 源代码怎么给你网盘网站建设
  • 网站建设dream站外推广内容策划
  • 做网站需要多大尺寸wordpress 优化
  • 建设商业网站网站流量评价有哪几方面
  • 贝尔利网站做网站营业范围
  • 在跨境网站贸易公司做怎么样优秀网页设计作品网站
  • 厦门网站建设 软件园wordpress国内课题组
  • 网站设计步骤包括哪些黑龙江网络推广好做吗
  • 广州网站制作公司优化端游传奇排行榜前十名
  • 免费网站模版 好用的阿里巴巴运营免费教程
  • 做系统软件的网站新郑网站开发
  • 大型门户网站建设功能电脑制作h5最常用软件
  • 建设银行境外购物网站汕头站扩建
  • 专用车网站建设哪家专业山东住建部和城乡建设官网
  • 长春南京小学网站建设宜宾公司做网站
  • 怎样做订房网站wordpress添加优酷视频播放
  • 电子商务网站建设市场分析上线了建的网站免费吗
  • wordpress 多站点模式厚街h5网站建设
  • iis 默认网站删除第一装修网
  • 关于网站排名优化需要怎么做公司简历模板电子版
  • 北京学习网站建设手机浏览器输入网址
  • 便捷的网站建设大学同学会网站建设方案
  • onedrive做网站下载盘课堂阵地建设网站
  • 怎么做网站子页上海解封最新消息
  • 网站被iframe河北人社app安卓版
  • 网站建设合同付款方式微商货源网
  • 太原seo网站排名友情链接翻译
  • 做网站浏览器标签一般放哪什么是软件开发工具