华为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%,不知道能不能过。
#华为笔试##华为##笔试题目#
全部评论
&我也是
点赞
送花
回复
分享
发布于 2020-04-08 23:07
这个规律没问题,我感觉,后面有几个0,最前面的0就可以往后移几位
点赞
送花
回复
分享
发布于 2020-07-22 12:02
滴滴
校招火热招聘中
官网直投

相关推荐

1 1 评论
分享
牛客网
牛客企业服务