大家好,我是涛哥。

今天,我们来看华为的一道面试题目:如何判断一个整数是否为2的n次方,其中n为非数整数,要求效率尽可能高。

这是一道非常典型的面试题目,它有很多发散的形式,比如:如果把上述的2换成3、4、5,该怎么做才能高效呢?

接下来,我们从不同的角度分析,并给出上述所有情况的算法思路和代码验证,希望大家有所收获,顺便通过面试。

涛哥在华为松山湖闲逛所拍

判断2的n次方

2的n次方的判断,是一个比较常见的问题。容易看出,2的n次方的二进制中,有且仅有一个1,  所以,可用如下思路来判断:


package mainimport "fmt"func is2Pow(n uint32) bool {if n == 0 {return false}if n & (n - 1) == 0 {return true}return false
}func main() {for i := uint32(0); i < 100; i++ {if is2Pow(i) {fmt.Println(i)}}
}

判断3的n次方

因为3是质数,所以可以先找出32位正整数中3的n次方的最大值(即3486784401),然后,思路就很自然了,如下:


package mainimport "fmt"func is3Pow(n uint32) bool {if n == 0 {return false}if 3486784401 % n == 0 {return true}return false
}func main() {for i := uint32(0); i < 100; i++ {if is3Pow(i) {fmt.Println(i)}}
}

判断4的n次方

4的n次方,首先必须是2的n次方,且有4^n = (3+1)^n, 根据二项式定理可知:4^n % 3 = 1,  所以,算法代码如下:


package mainimport "fmt"func is4Pow(n uint32) bool {if n == 0 {return false}if n & (n - 1) != 0 {return false}if n % 3 == 1 {return true}return false
}func main() {for i := uint32(0); i < 100; i++ {if is4Pow(i) {fmt.Println(i)}}
}

判断5的n次方

既然前面的方法都用了,那现在可考虑使用通用的方法了,如下:


package mainimport "fmt"func is5Pow(n uint32) bool {if n == 0 {return false}if n == 1 {return true}for {if n % 5 != 0 {return false}n = n / 5if n < 5 {break}}if n == 1 {return true}return false
}func main() {for i := uint32(0); i < 100; i++ {if is5Pow(i) {fmt.Println(i)}}
}

整体来看,上述四种方法各有技巧,希望大家从中举一反三,揣摩到算法优化的思路,横扫类似的笔试面试问题,拿到满意的offer,也欢迎大家在评论区讨论交流。

华为面试:判断2的n次方相关推荐

  1. 朋友去华为面试,轻松拿到26K的Offer,羡慕了......

    最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...

  2. 朋友去华为面试,轻松拿到30K的Offer,羡慕了......

    最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...

  3. 2021最新版JAVA开发面试那些事儿~(结尾有字节、华为面试内容)

    现在有越来越多的人进入互联网行业,但是各公司的面试花样也是越来越多,这里为大家整理了一些面试内容,供大家参考!(结尾有字节.华为面试内容) 一.北京神州新桥科技有限公司Java开发岗位 面试公司:北京 ...

  4. 算法--06年华为面试:求两个数组的最小差值(Java实现)

    Q题目 华为06年面试题(要求8分钟完成) 有两个数组a,b,大小都为n,数组元素的值任意,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. A解法 1.常见错误逻 ...

  5. 华为面试改革,我们该怎么跟进?

    戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 近日,华为轮值董事长徐直军撰写了< ...

  6. 华为面试分配_什么时候不做面试分配

    华为面试分配 by Roxy Ayaz 由Roxy Ayaz 什么时候不做面试分配 (When Not To Do The Interview Assignment) You are desperat ...

  7. 主题:一个中专生:我在华为面试的真实经历,转http://www.javaeye.com/topic

    华为是个创造神话的企业,从注册资金2万元的飞速膨胀.3G.高科技.高速成长.全民持股和民营企业--目前华为在国内不但是电信第一大供商货商,而且海外市场也越来越火红,目前正在蚕食网络商老大CISCO的本 ...

  8. 华为面试到入职培训 (南研所)

    文章目录 前言 第一面 性格测试 第二面 等结果 约定入职时间和体检 入职大队培训 食堂 加班问题 签合同,回岗位 感受与总结 前言 终于培训结束, 回到岗位了, 写写期间的经历. 因为是社招, 流程 ...

  9. 华为面试真实经历!群面+技术面最后还有英语面!

    前言 昨天是我去华为面试的整整一天,早上9点开始出发,一直弄到下午5点半,终于完成了所有的测评和面试! 简单说一下,我面的是Android高级开发职位,通过一个华为内部人员内推的(内推不是走后门!打铁 ...

最新文章

  1. 云计算技术 — 云计算技术发展编年史
  2. stm32单片机实现多个闹钟_如何学习单片机:单片机都是相通的,一通百通
  3. python 读取文件
  4. C语言试题五之计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和
  5. power bi函数_在Power BI中的行上使用聚合函数
  6. springmvc 登录互斥,实现避免单账户被多个地方同时登录
  7. phalcon的一些中文手册和帮助文档地址收集
  8. java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
  9. Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用
  10. cpuz测试分数天梯图_最新手机处理器天梯图出炉:第一实至名归,你手机处理器排名高吗...
  11. Java中常见定时任务的实现方式
  12. Java实现自己想要的代码生成器!
  13. JS 动态添加的元素 绑定事件
  14. 简要了解ios机型,推出年份,型号,容量,显示屏大小以及iOS系统
  15. VMWare安装Win10虚拟机
  16. 解决insmod error inserting 'hello ko' -1 Invalid module form
  17. 2018年PMP项目管理专业人士资格认证考试回顾总结
  18. 身体和灵魂,总得有一个在路上
  19. 9.5 考试 第三题 奇袭题解(codeforce 526f)
  20. 如何监控文件已成功通过EDI系统发给客户(一)-邮件通知

热门文章

  1. 预算技术(EAC,BAC,ETC)
  2. Pytorch详细教程——5.Tensors Explained
  3. 计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw
  4. Editplus 3.4 注册码
  5. Python爬虫——爬取知乎(实践)
  6. 齿轮相关计算机,古希腊人的齿轮计算机
  7. 汉莎澄清未禁止苹果AirTag用于行李托运,行李防丢可用伦茨Find My
  8. java jackson注意_Jackson 使用和注意项
  9. 在vmware workstation中构建局域网
  10. 客流监控摄像头展区人流量统计分析