华为4.8笔试第二道题,标准答案是否有错
牛客网已有同学上传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%,不知道能不能过。
#华为笔试##华为##笔试题目#