4.8华为笔试第二道题-二进制
输入一个0和1的整型串代表二进制
其中:
- 任意的00可以转化为10
- 任意的10可以转化为01
输出转化之后,最大的二进制。
个人想法:
观察转换的两种规则,
第一个是转换规则,连续的两个0能变大,延伸为所有连续的0000可以转化为1110(只有最后有一个0)
第二个是转移规则,0只能左移,1只能右移
因此,
随便一个序列110010100111010(15个,7个0,8个1)
从第一个0开始,后面的0都转移第一个0的后面,得到110000000111111
再通过00->10的规则,最后只剩下最右边的0,得到11 1111110 111111
最后转换为111111011111111
所以只需要统计长为n序列中前序1的个数m1,0的个数m2即可
如果m2==0或m2==1,那么只需要输出原序列
否则输出:【m1个1】-【m2-1个1】-【1个0】-【n-m1-m2个1】,这样是最大的
做的时候没想透彻,然后只通过了20%的用例,不知道我想的有没有错,欢迎指正。
#华为春招笔试##华为##笔试题目#