zoukankan      html  css  js  c++  java
  • 校招真题练习010 最长区间(京东)

    最长区间

    题目描述
    拉齐有一个01序列,他可以对这个序列进行任意多次变换,每次变换都是把序列的最后若干个元素放到最前面,例如:010011,将最后3个元素011放到最前面,序列变为011010。所有变换结束后,拉齐需要挑出一个全为1的连续区间,要求最大化区间长度。

    输入描述:
    共一行,一个01串,仅包含0或1。序列长度不超过50000。
    输出描述:
    一个整数,表示最长区间的长度。

     1 line = input()
     2 n = len(line)
     3 temp = ''
     4 find = False
     5 for i in range(n):
     6     if line[i] == '0':
     7         temp = line[i:] + line[:i] + '0'
     8         find = True
     9         break
    10 if not find:
    11     print(n)
    12 else:
    13     maxlen = 0
    14     curlen = 0
    15     for i in range(1,n+1):
    16         if temp[i] == '1' and curlen == 0:
    17             curlen = 1
    18         elif temp[i-1] == '1' and temp[i] == '1':
    19             curlen += 1
    20         elif temp[i-1] == '1' and temp[i] == '0':
    21             maxlen = max(maxlen,curlen)
    22             curlen = 0
    23     print(maxlen)

    思路:将字符串当作一个环处理,并且保证环的入口是'0',为了方便计算,再尾部再补一个'0'。这样只需要计算,数组连续1的区间长度,就相当于计算环的连续1的区间长度。

  • 相关阅读:
    c_hhc_互补二元组(延迟计数+简单公式变换)
    b_vj_Hamiltonian Cycle(记忆化+位运算各种技巧)
    b_lq_分考场(尽量安排到旧考场)
    线程停止
    Lambda表达式
    静态代理演示
    多线程模拟龟兔赛跑
    Runnable和Thread
    线程网图下载
    接口
  • 原文地址:https://www.cnblogs.com/asenyang/p/11099599.html
Copyright © 2011-2022 走看看