有为有不为,知足知不足
锐气藏于胸,和气浮于面
才气见于事,义气施于人
— 丰子恺
业精于勤…
题目描述:
给定一个整数,编写一个函数来判断它是否是 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;