博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣461. 汉明距离
阅读量:3910 次
发布时间:2019-05-23

本文共 1367 字,大约阅读时间需要 4 分钟。

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。注意:
0 ≤ x, y < 231.

思路一:

循环移位,每次判断两个数的最后一位是否相等

1 class Solution { 2     public int hammingDistance(int x, int y) { 3          4         int cnt = 0; 5         // 循环31次,每次判断一个位置 6         for(int i = 0; i < 31; i++){ 7             cnt += (x & 1) ^ (y & 1); 8             x >>= 1; 9             y >>= 1;10         }11         return cnt;12     }13 }

leetcode执行用时:0 ms > 100.00%, 内存消耗:35.5 MB > 64.54%

复杂度分析:

时间复杂度:O(1),Java 中 Integer 的大小是固定的,处理时间也是固定的。 32 位整数需要 32 次迭代。

空间复杂度:O(1),使用恒定大小的空间。

思路二:

1. 先用异或运算符求出x异或y的结果,这个异或运算符的结果的1的个数即是我们要求的汉明距离

2. 循环移位,每次取xor的最低位

1 class Solution { 2     public int hammingDistance(int x, int y) { 3         int count = 0; 4         int xor = x ^ y; 5         while(xor != 0){ 6             count += xor & 1; 7             xor = xor >> 1;     // xor右移一位 8         } 9         return count;10     }11 }

复杂度分析:

时间复杂度:O(1),Java 中 Integer 的大小是固定的,处理时间也是固定的。 32 位整数需要 32 次迭代。

空间复杂度:O(1),使用恒定大小的空间。

思路三:

思路参考:

使用布赖恩·克尼根算法,xor & (xor - 1)即可移除xor最右边的那个1,省去了移除0的过程,减少了迭代次数

1 class Solution { 2     public int hammingDistance(int x, int y) { 3         int count = 0; 4         int xor = x ^ y; 5         while(xor != 0){ 6             count += 1; 7             xor = xor & (xor - 1);     // 每次移除最右边的一个1 8         } 9         return count;10     }11 }

复杂度分析:

时间复杂度和空间复杂度都是O(1),但是迭代次数小于法一

转载地址:http://widrn.baihongyu.com/

你可能感兴趣的文章
单例模式最佳实践
查看>>
.NET Core + Spring Cloud:服务注册与发现
查看>>
今天你内卷了吗?
查看>>
设计模式之代理模式
查看>>
在 MySQL 中使用码农很忙 IP 地址数据库
查看>>
结构型设计模式总结
查看>>
dotNET:怎样处理程序中的异常(实战篇)?
查看>>
What is 测试金字塔?
查看>>
api接口返回动态的json格式?我太难了,尝试一下 linq to json
查看>>
.Net Core HttpClient处理响应压缩
查看>>
十分钟搭建自己的私有NuGet服务器-BaGet
查看>>
efcore 新特性 SaveChanges Events
查看>>
龙芯3A5000初样顺利交付流片
查看>>
用了Dapper之后通篇还是SqlConnection,真的看不下去了
查看>>
ABP快速开发一个.NET Core电商平台
查看>>
[NewLife.Net]单机400万长连接压力测试
查看>>
使用Azure人脸API对图片进行人脸识别
查看>>
快醒醒,C# 9 中又来了一堆关键词 init,record,with
查看>>
【招聘(深圳)】轻岁 诚聘.NET Core开发
查看>>
await,async 我要把它翻个底朝天,这回你总该明白了吧
查看>>