华为面试:判断2的n次方
大家好,我是涛哥。
今天,我们来看华为的一道面试题目:如何判断一个整数是否为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次方相关推荐
- 朋友去华为面试,轻松拿到26K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...
- 朋友去华为面试,轻松拿到30K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...
- 2021最新版JAVA开发面试那些事儿~(结尾有字节、华为面试内容)
现在有越来越多的人进入互联网行业,但是各公司的面试花样也是越来越多,这里为大家整理了一些面试内容,供大家参考!(结尾有字节.华为面试内容) 一.北京神州新桥科技有限公司Java开发岗位 面试公司:北京 ...
- 算法--06年华为面试:求两个数组的最小差值(Java实现)
Q题目 华为06年面试题(要求8分钟完成) 有两个数组a,b,大小都为n,数组元素的值任意,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. A解法 1.常见错误逻 ...
- 华为面试改革,我们该怎么跟进?
戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 近日,华为轮值董事长徐直军撰写了< ...
- 华为面试分配_什么时候不做面试分配
华为面试分配 by Roxy Ayaz 由Roxy Ayaz 什么时候不做面试分配 (When Not To Do The Interview Assignment) You are desperat ...
- 主题:一个中专生:我在华为面试的真实经历,转http://www.javaeye.com/topic
华为是个创造神话的企业,从注册资金2万元的飞速膨胀.3G.高科技.高速成长.全民持股和民营企业--目前华为在国内不但是电信第一大供商货商,而且海外市场也越来越火红,目前正在蚕食网络商老大CISCO的本 ...
- 华为面试到入职培训 (南研所)
文章目录 前言 第一面 性格测试 第二面 等结果 约定入职时间和体检 入职大队培训 食堂 加班问题 签合同,回岗位 感受与总结 前言 终于培训结束, 回到岗位了, 写写期间的经历. 因为是社招, 流程 ...
- 华为面试真实经历!群面+技术面最后还有英语面!
前言 昨天是我去华为面试的整整一天,早上9点开始出发,一直弄到下午5点半,终于完成了所有的测评和面试! 简单说一下,我面的是Android高级开发职位,通过一个华为内部人员内推的(内推不是走后门!打铁 ...
最新文章
- 云计算技术 — 云计算技术发展编年史
- stm32单片机实现多个闹钟_如何学习单片机:单片机都是相通的,一通百通
- python 读取文件
- C语言试题五之计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和
- power bi函数_在Power BI中的行上使用聚合函数
- springmvc 登录互斥,实现避免单账户被多个地方同时登录
- phalcon的一些中文手册和帮助文档地址收集
- java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
- Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用
- cpuz测试分数天梯图_最新手机处理器天梯图出炉:第一实至名归,你手机处理器排名高吗...
- Java中常见定时任务的实现方式
- Java实现自己想要的代码生成器!
- JS 动态添加的元素 绑定事件
- 简要了解ios机型,推出年份,型号,容量,显示屏大小以及iOS系统
- VMWare安装Win10虚拟机
- 解决insmod error inserting 'hello ko' -1 Invalid module form
- 2018年PMP项目管理专业人士资格认证考试回顾总结
- 身体和灵魂,总得有一个在路上
- 9.5 考试 第三题 奇袭题解(codeforce 526f)
- 如何监控文件已成功通过EDI系统发给客户(一)-邮件通知
热门文章
- 预算技术(EAC,BAC,ETC)
- Pytorch详细教程——5.Tensors Explained
- 计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw
- Editplus 3.4 注册码
- Python爬虫——爬取知乎(实践)
- 齿轮相关计算机,古希腊人的齿轮计算机
- 汉莎澄清未禁止苹果AirTag用于行李托运,行李防丢可用伦茨Find My
- java jackson注意_Jackson 使用和注意项
- 在vmware workstation中构建局域网
- 客流监控摄像头展区人流量统计分析