解题思路:时间复杂度O( l o g 2 C log_2C log2C)C是数据范围,最多31,表示二进制的位数,空间复杂度O( 1 1 1)
法一是调用函数来统计1的个数
如果不能用函数呢?我们自己如何实现相同效果?
代码
通过位移操作,不断取x和y的最低位进行比较,如果不一样就统计
classSolution{publicinthammingDistance(int x,int y){int ans =0;//计数while(x!=0|| y!=0){//只要x或y都不是全0,就继续ans +=(x &1)!=(y &1)?1:0;//x和y都取最低位,如果不一样,ans+1,否则ans+0x >>=1;//统计最低位后,右移一位,将最低位移走,下一次比较最低位的高位y = y>>1;}//下面代码是上面代码的简化版// for(int i = 0;i<32;i++){//题目规定每个二进制有32位// int i1 = x >> i & 1;//让当前为移到最低位后通过&1操作取出// int i2 = y >> i & 1;// if (i1!=i2) ans++;//如果取出的最低位不一样,就ans+1// }return ans;}}
classSolution{publicinthammingDistance(int x,int y){int ans =0;//计数int i = x ^ y;//异或,不同位会置为1while(i!=0){//只要还有1就继续ans += i&1;//取最低位,是1就ans+1,否则ans+0i>>=1;//右移一位,将当前已经处理的最低位抛弃}return ans;}}
3. Brian Kernighan算法
解题思路:时间复杂度O( l o g 2 C log_2C log2C)C是数据范围,最多31,表示二进制的位数,空间复杂度O( 1 1 1)
Day11 when gradient is small…… 怎么知道是局部小 还是鞍点?
using Math 这里巧妙的说明了hessan矩阵可以决定一个二次函数的凹凸性 也就是 θ \theta θ 是min 还是max,最后那个有些有些 哈 是一个saddle; 然后这里只要看hessan矩阵是不…