mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

当前位置: mg4377娱乐娱城官网 > www.mg4377.com > 正文

【www.mg4377.com】怎样决断贰个子弹头是不是是2的

时间:2019-10-30 04:59来源:www.mg4377.com
旁人家的面试题:二个大背头是或不是是“4”的N次幂 2016/05/30 · 基本功手艺 ·2 评论 ·算法 本文作者: 伯乐在线 -十年踪迹。未经笔者许可,防止转发! 接待到场伯乐在线 专辑审核人

旁人家的面试题:二个大背头是或不是是“4”的N次幂

2016/05/30 · 基本功手艺 · 2 评论 · 算法

本文作者: 伯乐在线 - 十年踪迹 。未经笔者许可,防止转发!
接待到场伯乐在线 专辑审核人。

【www.mg4377.com】怎样决断贰个子弹头是不是是2的N次幂,一个整数是还是不是是。这是 www.mg4377.com,leetcode.com 的第二篇。与上一篇后生可畏致,我们谈谈协同相对简便易行的主题材料,因为学习总重申安分守己。何况,固然是轻松的主题材料,追求算法的Infiniti的话,在那之中也许有大学问的。

static bool CheckPowerOfTwo(ulong num)
{
    return num > 0 && (num & (num - 1)) == 0;
}

“4”的寸头次幂

给定二个32位有标识整数(32 bit signed integer),写一个函数,检查那几个大背头是或不是是“4”的N次幂,这里的N是非负整数。

例如:

  • 给定 num = 16,返回 true,因为 16 = 42
  • 给定 num = 5,返回 flase

外加条件: 你可以预知不用循环和递归吗?

 

解题思路

只要忽略“附加条件”,那题还挺轻易的对吗?简直是随手拈来:

版本1

JavaScript

function isPowerOfFour(num){ while(!(num % 4)){ num /= 4; } return num === 1; }

1
2
3
4
5
6
function isPowerOfFour(num){
    while(!(num % 4)){
        num /= 4;
    }
    return num === 1;
}

本子1 近乎很简短、很苍劲的理当如此,它的小时复杂度是 log4N。有同学说,还足以做一些微小的改变:

版本1.1

JavaScript

function isPowerOfFour(num){ while(!(num % 4)){ num >>>= 2; } return num === 1; }

1
2
3
4
5
6
function isPowerOfFour(num){
    while(!(num % 4)){
      num >>>= 2;
    }
    return num === 1;
}

下边包车型地铁代码用位移代替除法,在任何语言中越来越快,鉴于 JS 平时状态下非常坑的位运算操作,不确定速度能变快。

好了,最注重的是,不管是 版本1 大概 版本1.1 就好像都不满意大家眼前提到的“附加条件”,即不使用循环和递归,大概说,大家须要寻觅O(1) 的解法。

信守惯例,大家先思考10分钟,然后往下看 ——


并不是循环和递归

事实上那道题真心有广大种思路,总计指数之类的对数学系学霸们一同不成难点嘛:

版本2

JavaScript

const log4 = Math.log(4); function isPowerOfFour(num){ var n = Math.log(num) / log4; return n === (0|n); }

1
2
3
4
5
const log4 = Math.log(4);
function isPowerOfFour(num){
    var n = Math.log(num) / log4;
    return n === (0|n);
}

啊,通过对数公式 logm(n) = log(n) / log(m) 求出指数,然后决断指数是或不是一个整数,那样就足以不要循环和递归消除难点。並且,还要小心细节,能够将 log4 当作常量收取出来,这样毫无每一遍都再也计算,果然是学霸范儿。

但是呢,利用 Math.log 方法也终于某种意义上的犯规吧,有未有永不数学函数,用原生方法来解决吗?

道理当然是这样的有了!並且还不仅后生可畏种,大家能够继续想30秒,要起码想出黄金年代种啊 ——


编辑:www.mg4377.com 本文来源:【www.mg4377.com】怎样决断贰个子弹头是不是是2的

关键词: 基础技术