可以使用滑动窗口的思想,来获取连续1 的数量
# -*- coding: utf-8 -*-
"""
@Time : 2023/5/16 10:26
@Author : Frank
@File : HJ86.py
"""
def prepare_data():
num = input()
return int(num)
def cov_bin(num: int) -> str:
return bin(num)[2:]
def get_count(s: str):
"""
使用滑动窗口
# 连续1 的个数
:param s:
:return:
"""
n = len(s)
start = 0
# 寻找第一次出现1 的位置
while start < n and s[start] == '0':
start += 1
left = start
right = left
# 记录连续为1的个数,3,2,8
res = []
while left < n:
while right < n:
if s[right] == '1':
right += 1
else:
break
# 记录当前的窗口值
cur_len = right - left
res.append(cur_len)
# 更新 left值
while right < n:
# 寻找下一次出现1 的位置
if s[right] == '1':
break
else:
right += 1
left = right
# print(f"cur left:{left}")
return max(res) if res else 0
if __name__ == '__main__':
# print(get_count(s='001110010110001'))
num = prepare_data()
s = cov_bin(num)
print(get_count(s=s))
pass
可以使用滑动窗口的思想,在一个窗口内保证全是连续的1 , 然后依次更新滑动窗口,找到所有连续1 的窗口长度,最后取最大值。

京公网安备 11010502036488号