【力扣题解】868. 二进制间距
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。
2、基础框架
- Java版本框架代码如下:
class Solution { public int binaryGap(int n) { }}
3、原题链接
868. 二进制间距
二、解题报告
1、思路分析
(1)先用异或运算计算出当n转化为二进制后,第i + 1位上的数为0还是1。然后计算两个相邻1之间的最大距离。
2、代码详解
class Solution { public int binaryGap(int n) { int[] num = new int[32]; int left = -1; int ans = 0; for(int i = 0;i < 32;i++) { if((n & 1<<i) > 0) { num[i]++; } } for(int i = 0;i < 32;i++) { if(num[i] == 1) { if(left == -1) { left = i; }else { ans = Math.max(ans,i - left); left = i; } } } return ans; }}
三、本题知识
位运算