LeeCode 231 - daily01

有为有不为,知足知不足
锐气藏于胸,和气浮于面
才气见于事,义气施于人
— 丰子恺 ​​​

业精于勤…


题目描述:

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

Leecode 231 该题在小米公司微软公司都曾被面过。

但是该题在面试过程中,真的不容易想到最优解。不过算法是一步一步演进的,不可能一步到位。

1. 普通解法

public boolean isPowerOfTwo(int n) {
        if(n <= 0) return false;
        while(n %2 == 0){
            n = n >> 1;
        }
        return n == 1;
    }

很显然,时间复杂度为O(logN)


2. 最优解

 public boolean isPowerOfTwo(int n) {
        if (n <= 0) return false;
        return (n & (n - 1)) == 0;
    }
 public boolean isPowerOfTwo(int n) {
    if (n == 0) return false;
    long x = (long) n;
    return (x & (-x)) == x;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章