位运算
汉明距离
方法1:数组
public boolean isUnique(String astr) {
char[] ch = new char[26];
for (char c : astr.toCharArray()) {
if (ch[c - 'a'] != 0) return false;
ch[c - 'a']++;
}
return true;
}方法2:位运算

延伸阅读:位运算操作常见技巧
方法1:基本位运算
方法2:高阶位运算

方法3:库函数
方法1:模拟
数据范围不大,模拟即可,两步走,
step1.统计每一个数二进制数中1的个数,记为
bitsstep2.判断
bits是否是质数
其中step1的操作:

更加详细的位操作技巧,阅读位运算操作常见技巧(100+收藏,5K阅读)
方法2:打表
注意到数据的范围是100000,转成二进制是11110100001001000000,20位,也就是说每一位都为1的话,也只有20位,需要拿到20位以下质数打表
方法3:DP打表
质数的结果可以通过打表的方式获取,每个数的位数也可以通过打表的方式获取
f[i]表示当前数i的二进制1的个数初始时0的二进制1的个数是0,1的二进制1的个数是1个
一般情况下
f[i]与i>>1的结果有关,判断下当前位是否是1即可f[i & 1],
Follow Up
如果
left和right的数据范围不是10^6而扩大到10亿,如何优化算法
我能想到的是通过埃筛的方式快速的筛质数,然后打表
你会如何做呢?欢迎评论区留言~

扩展阅读
更加详细的位操作技巧,阅读位运算操作常见技巧(100+收藏,5K阅读)
Last updated