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

有多人做网站是个人备案免费下载百度并安装

有多人做网站是个人备案,免费下载百度并安装,烟台优化网站排名,网站正在维护模板给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改: 操作 1 :如果二进制串包含子字符串 "00" ,你可以用 "10" 将其替换。 比方说, "00010"…

给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改:

  • 操作 1 :如果二进制串包含子字符串 "00" ,你可以用 "10" 将其替换。
    • 比方说, "00010" -> "10010"
  • 操作 2 :如果二进制串包含子字符串 "10" ,你可以用 "01" 将其替换。
    • 比方说, "00010" -> "00001"

请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x 对应的十进制数字大于二进制字符串 y 对应的十进制数字,那么我们称二进制字符串 x 大于二进制字符串 y 

示例 1:

输入:binary = "000110"
输出:"111011"
解释:一个可行的转换为:
"000110" -> "000101" 
"000101" -> "100101" 
"100101" -> "110101" 
"110101" -> "110011" 
"110011" -> "111011"

纯思维题,需要在两个对字符串的操作中找到规律。考虑两个操作:

00 -> 10,数字变大了,符合最大二进制字符串的所求。

10 -> 01,数字变小了,那么我们为什么需要这个操作?他的意义是什么?

能够显而易见想到的就是010,通过10 -> 01,虽然单步变小了,但修改后变为001,进而使用00 -> 10,最终得到101,整体是变大的。

观察010 -> 001,操作2的起到的作用是什么?

将1右移,将0连起来,进而能够使用操作1对整体进行扩大。

那么将示例按照这个思路解析:

  • "000110" -> "000101"
  • "000101" -> "000011"  到此已经将所有0连续起来。

继续考虑所有连续的0最终会变成什么?

00 -> 10,0000就会变成1000,再变成1100,再变成1110。即000011 -> 111011。

使用上面的过程多分析几个字符串就能得到规律:

  1. 通过操作2,可以将101010001这种1/0交替的字符串变成100000111这种1...0...1交替的字符串。
  2. 再通过操作1,可以将连续的0,变成仅最后一位为0,其余位为1的字符串。00000 -> 11110。

也就是说,最终得到的最大二进制字符串中,最多只有一个0。

而且这个0的位置可以通过原字符串中1和0出现的次数,以及第一个0出现的位置确定。

以10101001为例:

  • 首先出现0之前的1是不需要改动的。
  • 记录第一个出现0的位置,zero_first = 1。
  • 遍历字符串得到所有0的个数,num = 4。
  • 那么按照上面的分析,原字符串可以变成10000111。
  • 进而变成11110111,剩余0的位置位于下标  zero_first + num -1处。

这里剩余的问题就是严格证明为什么按照这个流程下来得到的数是最大的。

从直觉上,想让字符串变大,就尽可能的让所有字符是1,并且如果有0,0的位置要尽量靠后。上面过程得到的结果正符合这个直觉。

假设最终还有一个数比得到的11110111大,那么这个数中0的位置一定要比11110111靠右,并且这个数一定能在11110111基础上通过操作1和操作2得到。而操作1和操作2中将字符串变大的操作需要至少两个0,而11110111只有1个0,所以不存在这个数。

class Solution {public String maximumBinaryString(String binary) {int first_zero_index = binary.indexOf('0');int zero_count = 0;int length = binary.length();if(first_zero_index < 0){return binary;}for(int i = first_zero_index;i < length;i++){// if(binary.charAt(i) == '0'){//     zero_count++;// }zero_count -= binary.charAt(i) - '1';}return "1".repeat(first_zero_index + zero_count - 1) + "0" + "1".repeat(length - zero_count - first_zero_index);}
}

这里还有一个值得注意的地方,关注代码中注释掉的部分。他们的效率差别会有多大?

            // if(binary.charAt(i) == '0'){//     zero_count++;// }zero_count -= binary.charAt(i) - '1';

原因:

  • 字符比较(binary.charAt(i) == '0')需要将字符转换为数字进行比较,这是一个相对耗时的操作。
  • 字符减法(binary.charAt(i) - '1')直接将字符转换为数字,然后执行减法运算,这是一个更快的操作。

因此,对于长字符串,zero_count -= binary.charAt(i) - '1' 的效率将比 binary.charAt(i) == '0' 高得多。

http://www.hrbkazy.com/news/9185.html

相关文章:

  • 广东建筑人才网保定网站建设方案优化
  • php网站开发软件网络推广有多少种方法
  • 加强镇政府网站建设的通知模板免费网站建设
  • 国家卫生健康委员会官网网站广州网络推广外包平台
  • 单页营销网站怎么做媒体发布公司
  • 做的网站一模一样会被告吗百度关键词批量看排名工具
  • 做外贸需要网站吗国家免费培训网站
  • 武汉 做网站优化合作平台
  • 日本做的视频网站有哪些线上广告平台
  • 网站建设公司兴田德润在那里查域名注册详细信息查询
  • 做销售的 都有什么网站网络建站
  • 做编程题的网站竞价交易规则
  • 如何让百度收录网站怎么制作网址
  • 专做视频和ppt的网站在线客服系统
  • 报一个电脑培训班多少钱厦门网站seo
  • 同步网站内容怎么做安卓优化大师最新版
  • wordpress 手动上传主题seo快速建站
  • 在本地用dedecms做好的网站如何上传到服务器?竞价培训
  • 专门做钱币的网站百度知道网址
  • wordpress 源码剖析seo内部优化包括哪些内容
  • 免费制作永久企业网站成都排名seo公司
  • 丹阳房产网手机网站优化排名
  • 网站备案被注销 接入商百度关键词排名
  • php 实现 代理 访问 美国 网站云优化软件
  • 加强意识形态建设 办好政协网站企业营销策划及推广
  • wordpress视觉编辑器seo在线优化工具
  • 台州中兴建设咨询有限公司网站如何快速搭建一个网站
  • 上海网站公司电话seo推广是什么意思
  • 权大师的网站是哪个公司做的香港疫情最新消息
  • WordPress添加下一篇贵州二级站seo整站优化排名