当前位置: 首页 > 知识库问答 >
问题:

最长的连续子序列,使得零的两倍数小于一的三倍数

鲁望
2023-03-14

我试着从黑客的角度来解决这个问题,我尝试了野蛮的前解决方案,但它似乎不起作用。有人能给我一个有效解决这个问题的主意吗。https://www.hackerrank.com/contests/sep13/challenges/sherlock-puzzle

给定一个包含“0”和“1”以及一个整数K的二进制字符串(S),求(S*K)的最长连续子序列的长度(L),使零的两倍数<=该序列中1的三倍数(2*#0S<=3*#1S)。

S*K定义如下:S*1=ss*K=S+S*(k-1)

约束1<=S<=1,000,000 1<=K<=1,000,000

输出格式为单个整数L-测试用例的答案

共有1个答案

巫马越彬
2023-03-14

这里有一个提示:

让我们首先假设K=1,并且S看起来像(使用点表示0):

..1...11...11.....111111....111....
      e    f      b  a c    d

关键是要注意,如果最长的可接受序列包含1,那么它还将包含任何相邻序列。例如,如果最长的序列在a处包含1,那么它也将包含b和c之间的所有序列(包括)。

 类似资料:
  • 我以前见过一些最长的连续序列问题,比如查找递增子序列。我现在正在努力进一步发展我的技能。给定一个整数数组,我想找到一个最长的连续序列,其中各个子序列中所有元素的差值小于一个给定的数字,例如3。一个例子是[10,11,12,15,13],其中只有前三个元素满足条件。此外,我还想返回给定数组中第一个和最后一个元素的索引。 我想做两个函数;get_first_element(arr)和get_last_

  • 返回两个或两个以上数字的最小公倍数。 使用最大公约数(GCD)公式和 lcm(x,y) = x * y / gcd(x,y) 来确定最小公倍数。 GCD公式使用递归。 const lcm = (...arr) => { const gcd = (x, y) => (!y ? x : gcd(y, x % y)); const _lcm = (x, y) => x * y / gcd(x,

  • {4,5,1,5,7,6,8,4,1},答案是5。 对于第一个例子,子数组{5,3,1,4,2}排序后可以形成连续序列1,2,3,4,5,它们是最长的。 对于第二个示例,子数组{5,7,6,8,4}是结果子数组。

  • 问题内容: 所以我想做的是将double转换为有理数。我检查小数点后有多少个数字,例如,我想将数字123.456保存为123456/1000。 但是,对于数字123.456,我得到了一个四舍五入的错误,结果是123455。我想可以用BigDecimal来解决这个问题,但我无法使其正常工作。同样,在计算出有理数之后,我想用参数(int numerator,int denominator)调用另一个构

  • 问题内容: 我如何习惯地分批处理序列的元素? 例如,对于序列“ abcdef”,批处理大小为2,我想执行以下操作: 当然,这是行不通的,因为它期望列表中的单个元素本身包含2个元素。 什么是一种好的,简短,整洁的pythonic方法,可以批量处理列表中的下n个元素,或者处理较大字符串中长度为n的子字符串(两个类似的问题)? 问题答案: 我确信有人会提出更多的“ Pythonic”,但如何: 请注意,

  • Python3 实例 以下代码用于实现最小公倍数算法: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # 定义函数 def lcm(x, y): # 获取最大的数 if x > y: greater = x else: greater = y while(True): if((greater % x == 0) a