LeetCode刷题笔记868:二进制间距(Python实现)
2019-05-14 17:55
447 查看
题目描述:
给定一个正整数
N,找到并返回
N的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回
0。
示例 1:
[code]输入:22 输出:2 解释: 22 的二进制是 0b10110 。 在 22 的二进制表示中,有三个 1,组成两对连续的 1 。 第一对连续的 1 中,两个 1 之间的距离为 2 。 第二对连续的 1 中,两个 1 之间的距离为 1 。 答案取两个距离之中最大的,也就是 2 。
示例 2:
[code]输入:5 输出:2 解释: 5 的二进制是 0b101 。
示例 3:
[code]输入:6 输出:1 解释: 6 的二进制是 0b110 。
示例 4:
[code]输入:8 输出:0 解释: 8 的二进制是 0b1000 。 在 8 的二进制表示中没有连续的 1,所以返回 0 。
提示:
1 <= N <= 10^9
Solution:
先将N转换为二进制字符串,然后用dict数出为‘1’的元素个数,如果小于2,则返回0; 当1的个数大于等于2时:先将1元素的下标存到一个list里,然后相邻下标作差,并将差再存到另一个list里,最后返回差里面最大值
执行用时 : 24 ms, 在Binary Gap的Python提交中击败了97.83% 的用户 内存消耗 : 11.7 MB, 在Binary Gap的Python提交中击败了39.35% 的用户
[code]from collections import Counter class Solution(object): def binaryGap(self, N): """ :type N: int :rtype: int """ N_BINARY = bin(N) N_BINARY_STR = str(N_BINARY) c = Counter(N_BINARY_STR) oneindex = [] gap = [] for i in c.items(): if c['1'] < 2 : return 0 for i in range(len(N_BINARY_STR)): if N_BINARY_STR[i] == '1': oneindex.append(i) for j in range(len(oneindex)-1): gap.append(oneindex[j+1] - oneindex[j]) return max(gap)
相关文章推荐
- LeetCode 868. 二进制间距(python)
- leetcode的python实现 刷题笔记14:最长公共前缀
- leetcode的python实现 刷题笔记70:爬楼梯(动态规划)
- leetcode的python实现 刷题笔记28:实现strStr()
- leetcode的python实现 刷题笔记74:搜索二维矩阵(二分查找的思想)
- LeetCode刷题笔记342:4的幂(Python实现)
- LeetCode 868. 二进制间距
- leetcode的python实现 刷题笔记13: 罗马数字转整数
- LeetCode刷题笔记82: 删除排序链表中的重复元素 II(Python实现)
- LeetCode刷题笔记985:查询后的偶数和(Python实现)
- LeetCode刷题笔记263:丑数(Python实现)
- leetcode的python实现 刷题笔记9:回文数 暴力解法和进阶算法
- leetcode的python实现 刷题笔记26:删除排序数组中的重复项
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- leetcode的python实现 刷题笔记58:最后一个单词的长度(取巧的做法和全网最正确的做法)
- leetcode - 868 - 二进制间距
- LeetCode刷题笔记1041:困于环中的机器人(Python实现)
- LeetCode 题 - 67. 二进制求和 python实现
- leetcode的python实现 刷题笔记35:搜索插入位置的暴力解法和优化解法
- LeetCode刷题笔记53:最大子序和(Python实现)