这是悦乐书的第333次更新,第357篇原创

01看题和准备

今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868)。给定正整数N,找到并返回N的二进制表示中两个连续1之间的最长距离。如果没有连续两个1,则返回0。例如:

输入:22

输出:2

说明:22的二进制是10110。在22的二进制表示中,有三个1,第一对连续的1距离为2,第二对1的距离为1,答案是这两个距离中最大的一个,即2。



输入:5

输出:2

说明:5的二进制是101。



输入:6

输出:1

说明:6的二进制是110。



输入:8

输出:0

说明:8的二进制是1000。在二进制表示为8时没有任何连续的1,所以我们返回0。

注意

  • 1 <= N <= 10 ^ 9

02 第一种解法

题目的意思是计算一个二进制数中每对1的最长距离,若是只有一个1,距离则为0。

因此,我们先将N转为一个二进制字符串,然后去遍历字符串中的字符,使用一个临时变量存储前一个1的索引值,遇到新的1时就计算彼此之间的距离,取最大值,最后输出距离。

public int binaryGap(int N) {
String str = Integer.toBinaryString(N);
int prev = -1, distance = 0;
for (int i=0; i<str.length(); i++) {
if (str.charAt(i) == '1') {
if (prev == -1) {
prev = i;
} else {
distance = Math.max(distance, i-prev);
prev = i;
}
}
}
return distance;
}

03 第二种解法

如果不借助包装类Integer的转换二进制字符串方法,还有其他方式可以解吗?

可以,使用位运算即可。

使用右移位运算,可以得到其二进制数最后一位数,判断是1还是0,可以使用与运算,与运算的规则是相同位上为1就为1,0&1 = 0,1&1=1。剩下的就是计算最长距离了,还是使用一个临时变量存储前一次的1,最后输出最长距离。

public int binaryGap(int N) {
int prev = -1, distance = 0;
for (int i=0; i<32; i++) {
if (((N>>i)&1) == 1) {
if (prev != -1) {
distance = Math.max(distance, i-prev);
}
prev = i;
}
}
return distance;
}

04 第三种解法

和上面第二种解法一样的思路,只是将右移位运算、与运算拆分成两步来完成,循环也换成了while循环,其他处理思路没变。

public int binaryGap(int N) {
int prev = -1, distance = 0, i = 0;
while (N != 0) {
if ((N&1) == 1) {
if (prev != -1) {
distance = Math.max(distance, i-prev);
}
prev = i;
}
i++;
N >>= 1;
}
return distance;
}

05 小结

算法专题目前已连续日更超过六个月,算法题文章203+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

最新文章

  1. 【leetcode】 Remove Duplicates from Sorted List
  2. HDU 2795 Billboard(线段树)
  3. ZeroMQ(java)之I/O线程的实现与组件间的通信
  4. makefile--Unfound symbol
  5. java WebService简单使用案例
  6. WordPress BackWPup插件‘tab’参数跨站脚本漏洞
  7. Shell脚本中单引号(‘)和双引号(“)的使用区别[转载]
  8. 最新VMware Workstation 10注册码,绝对可用!
  9. Deep Learning (Python, C, C++, Java, Scala, Go)
  10. https://github.com/commonsguy/cw-omnibus.git
  11. Maven_2 本地资源库 中央存储库
  12. PAT A1111 Online Map (30 分)——最短路径,dijkstra
  13. linux命令学习之:ifup/ifdown
  14. python与VScode
  15. Astah professional 7.2
  16. 使用PrintWriter out=response.getWriter();输出script脚本时乱码解决
  17. 腾讯云HTTPS设置管理
  18. JS-倒计时效果
  19. Web前端学习资料
  20. 将maven打包为一个jar(可以体外加入jar)

热门文章

  1. 数据结构之查找(图片来源,老师PPT)
  2. python打印实心等边三角形和空心等边三角形
  3. openssl x.509证书
  4. AD使用adsi 组件 获取域信息
  5. ubuntu 配置smb后无法访问
  6. idea 新手入门配置
  7. Redis数据类型之列表操作
  8. CSS3基础——笔记+实战案例(CSS基本用法、CSS层叠性、CSS继承性)
  9. GO语言学习笔记3-int与byte类型转换
  10. MySQL 运维管理平台