LeetCode Practice(一)

栏目: 编程工具 · 发布时间: 5年前

第一题:计算二进制数两个1之间的间距

  • 题目:

    LeetCode Practice(一)

我的思路

  • 英文翻译过来就是把数字化成二进制,计算两个1之间的最大间距。1000,1100,1010的最大间距分别是0,1,2.以此类推
  • 我的第一反应是大学数字逻辑课上的一个知识点,十进制转化为二进制——短除法!
  • 也就是说,在接收到输入的十进制数之后,利用短除法,转化为二进制数。转化的过程进行间距的计算
  • 虽然短除法先计算出来的是二进制低位的数,但是1010的间距从左往右数和从右往左数,结果是等价的
  • 实现如下:
func BiggestGap(n int) int {
    distance,temp := 0,0
    bValue := 0
    for n,bValue = bDiv(n);bValue==0; {
        n,bValue = bDiv(n)
    }
    for (n>0)  {
        n,bValue = bDiv(n)
        temp+=1
        if bValue==1 {
            if temp>distance {
                distance=temp
            }
            temp = 0
        }
    }
    return distance
}

func bDiv(n int)(remainder,bValue int){
    if n%2 == 0 {
        return n/2,0
    }else {
        return (n-1)/2,1
    }
}

别人的思路

  • 看完题目,肯定是得自己先琢磨。琢磨完了,得学习学习别人是怎么分析的。先贴上别人的实现,源码是C++,我翻译成golang版本了
  • 别人家的版本:
func BinaryDistance(n uint) int {
    var i uint
    distance,last:=0,-1
    for i=0;i<32;i++{
        if (n >> i) & 1 !=0 {
            if last>=0 {
                distance = max(distance,int(i)-last)
            }
            last = int(i)
        }
    }
    return distance
}

func max(numbers ...int)  int{
    max := 0
    for _,num := range numbers{
        if num>max {
            max=num
        }
    }
    return max
}
  • 这个思路的关键点是 xxxxx0 & 000001的结果恒为零,xxxxx1 & 000001的结果恒为1(x的意思是为0或1)。
  • 有了这个计算基础之后,加上int类型默认是32位,借助移位运算符 >>,就能够判断二进制数的每一位是0还是1了
  • 最后这部分就没什么难度了,不断计算相邻两个1的距离,比之前保存的最大间距大,更新,小,丢弃,调整位置继续计算

以上所述就是小编给大家介绍的《LeetCode Practice(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

重新定义团队:谷歌如何工作

重新定义团队:谷歌如何工作

拉兹洛·博克 / 宋伟 / 中信出版集团 / 2015-12-1 / CNY 56.00

谷歌首席人才官拉斯洛•博克权威力作,谷歌公开认可的谷歌高层作品,首度揭秘谷歌颠覆工业时代模式的人才和团队管理的核心法则,《纽约时报》畅销榜第一名,Business Insider 2015最佳商业书籍,谷歌的创造力就在于此! 编辑推荐! 1、 谷歌人才官首次公开谷歌人才和团队管理的核心秘籍 在谷歌执掌人事多年的拉斯洛•博克是人才和团队管理的顶级专家。他加入谷歌后,谷歌的员工数从六......一起来看看 《重新定义团队:谷歌如何工作》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器