leetcode 算法题868 (简单226) 二进制间距
- 题目介绍
给定一个正整数 N,
找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回 0 。
- 示例
输入:22
输出:2
解释:22 的二进制是 0b10110 。在 22 的二进制表示中,有三个 1,组成两对连续的 1 。第一对连续的 1 中,两个 1 之间的距离为 2 。第二对连续的 1 中,两个 1 之间的距离为 1 。答案取两个距离之中最大的,也就是 2 。
输入:5
输出:2
解释:5 的二进制是 0b101 。
输入:6
输出:1
解释:6 的二进制是 0b110 。
输入:8
输出:0
解释:8 的二进制是 0b1000 。在 8 的二进制表示中没有连续的 1,所以返回 0 。
- 注意
1 <= N <= 10^9
- 解法一
/** * @param {number} N * @return {number} */
var binaryGap = function(N) {
let str = N.toString(2), max = 0, count = i = 1;
while(i < str.length) {
if(str[i++] === '0') {
count++;
} else {
max = Math.max(count, max);
count = 1;
}
}
return max;
};
执行用时 : 104 ms, 在所有 JavaScript 提交中击败了16.87%的用户
内存消耗 : 33.9 MB, 在所有 JavaScript 提交中击败了17.39%的用户
- 解法二
/** * @param {number} N * @return {number} */
var binaryGap = function(N) {
if(!(N & (N - 1))) {
return 0;
}
while(!(N & 1)) {
N = N >> 1;
}
let count = max = 1;
N = N >> 1;
while(N) {
if(N & 1) {
max = Math.max(max, count);
count = 1;
} else {
count++;
}
N = N >> 1;
}
return max;
};
执行用时 : 72 ms, 在所有 JavaScript 提交中击败了93.98%的用户
内存消耗 : 33.7 MB, 在所有 JavaScript 提交中击败了43.48%的用户
今天的文章leetcode 算法题868 (简单226) 二进制间距分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68068.html