牛客网已有同学上传AC题解,但发现结果并不是最优解。
标准答案应该也是和这位同学一样,走一遍遍历,00替换成10,然后010替换成001,001再转换为101,但可以找到反例:
10110,用上述方法作答,得到结果是10110,但其实最大结果应该是11011。
做法是找规律:
如果0的个数大于等于1,可以把除了最高位的0之外的0都通过10->01往前移,最终把所有排在地位的0都移到最高位0的左边,
接下来才实施00->10操作,这样高位的1会越来越多。
找一下规律,其实最优解都是至多只有一个0,它的位置在(最高位0(原二进制数)的位置+除它之外0的个数)这个地方,其余n-1个数都是1。
第一道AC,第二道一直30%,不知道能不能过。
全部评论
(2) 回帖