常见位运算基础
在算法面试中,位运算因其高效性常作为考点出现。掌握几个核心技巧能显著提升解题效率。
常用位运算技巧总结
1. 清除最右侧的 1
利用 n & (n - 1) 可以消除整数二进制表示中最右侧的 1。这在统计 1 的个数(汉明重量)时非常有用。
class Solution {
public:
int hammingWeight(int n) {
int count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
};
2. 异或运算性质
异或(^)具有交换律和结合律,且相同为 0,不同为 1。常用于寻找只出现一次的数字。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}
};
题目一:判断字符是否唯一
问题描述: 实现一个算法,确定一个字符串的所有字符是否全都不同。
思路解析
由于 ASCII 码中小写字母只有 26 个,我们可以用一个整数的二进制位来充当哈希表(位图思想)。每一位代表一个字符,若该位为 1 则表示对应字符已出现过。
注意:如果字符串长度超过 26,根据鸽巢原理,必然存在重复字符,可直接返回 false。
代码实现
class Solution {
public:
bool isUnique(string astr) {
if (astr.() > ) ;
bitMap = ;
( ch : astr) {
i = ch - ;
((bitMap >> i) & ) ;
bitMap |= ( << i);
}
;
}
};


