有爲有不爲,知足知不足
銳氣藏於胸,和氣浮於面
才氣見於事,義氣施於人
— 豐子愷
業精於勤…
題目描述:
給定一個整數,編寫一個函數來判斷它是否是 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;