阴阳神万物主 发表于 2020-1-23 21:48:37

zltzlt 发表于 2020-1-23 21:34
解答错误

输入:


想康康我的解法能不能解对这个,但是单单拷贝就让我的 idle 陷入无响应状态QWQ

zltzlt 发表于 2020-1-23 21:51:26

阴阳神万物主 发表于 2020-1-23 21:48
想康康我的解法能不能解对这个,但是单单拷贝就让我的 idle 陷入无响应状态QWQ

呵呵{:10_256:}用记事本试试

阴阳神万物主 发表于 2020-1-23 21:51:40

我来康康能否承受住这道题目。
def solve(lst:'list of int >= 0',debug=False)->list:
    if lst:
      loop = lst[:1]
      for i in range(len(lst)-1):
            l = len(loop)
            if lst != loop or lst != loop[(i+1)%l]:
                loop = lst[:i+1] if lst == loop else lst[:i+2]
                if debug:
                  print('调试',loop)
      return len(loop)
    else:
      return 0
if __name__ == '__main__':
    print('示例1 输出:',solve())
    print('示例2 输出:',solve())
    print('示例3 输出:',solve(,debug=1))
    print('别人错的12#',solve())
    print('别人错的11#',solve())
    print('别人错的16#',solve())

zltzlt 发表于 2020-1-23 21:53:18

阴阳神万物主 发表于 2020-1-23 21:51
我来康康能否承受住这道题目。

解答错误

输入:
输出:11
预期结果:6(循环节为 )

阴阳神万物主 发表于 2020-1-23 22:15:18

本帖最后由 阴阳神万物主 于 2020-1-23 22:20 编辑

zltzlt 发表于 2020-1-23 21:53
解答错误

输入:

唉~又增加了一个耗时间的环节。
def solve(lst:'list of int >= 0',debug=False)->list:
    if lst:
      loop = lst[:1]
      for i in range(len(lst)-1):
            l = len(loop)
            if lst != loop or lst != loop[(i+1)%l]:
                if lst == loop:
                  a = loop[:]
                  b = lst
                  d = (len(b)-len(a))//2
                  a += b[:d]
                  b = b
                  #print('调试',a,b)
                  if a == b:
                        loop = a
                        continue
                loop = lst[:i+1] if lst == loop else lst[:i+2]
                if debug:
                  print('调试',loop)
      return len(loop)
    else:
      return 0
if __name__ == '__main__':
    print('示例1 输出:',solve())
    print('示例2 输出:',solve())
    print('示例3 输出:',solve())
    print('别人错的12#',solve())
    print('别人错的11#',solve())
    print('之前错的23#',solve())

优化后:
def solve(lst:'list of int >= 0',debug=False)->list:
    if lst:
      loop = 1
      for i in range(1,len(lst)-1):
            if lst != lst or lst != lst[(i+1)%loop]:
                if lst == lst:
                  r = loop+i
                  l = r//2
                  if lst[:l]==lst:
                        loop = l
                        continue
                loop = i+1 if lst == lst else i+2
                if debug:
                  print('调试',loop)
      return loop
    else:
      return 0
if __name__ == '__main__':
    print('示例1 输出:',solve())
    print('示例2 输出:',solve())
    print('示例3 输出:',solve())
    print('别人错的12#',solve())
    print('别人错的11#',solve())
    print('之前错的23#',solve())


zltzlt 发表于 2020-1-23 22:22:32

阴阳神万物主 发表于 2020-1-23 22:15
唉~又增加了一个耗时间的环节。

优化后:

{:10_256:}通过了

阴阳神万物主 发表于 2020-1-23 22:43:37

zltzlt 发表于 2020-1-23 22:22
通过了

欧耶!(手舞足蹈状)

Jetty 发表于 2020-1-23 23:14:49

def array_diff(arr1, arr2):
    for i in range(len(arr2)):
      if arr1 != arr2:
            return False
    return True

def arr_proc(lst):
    if len(lst) < 2: return lst
    find_index = lst.index(lst, len(set(lst)))
    loop_arr = []
   
    is_loop = True
    while len(loop_arr) < len(lst) and is_loop:
      if lst in lst:
            loop_arr = lst[:lst.index(lst, find_index)]
      else:
            loop_arr = lst
      arr_len = len(loop_arr)
      for i in range(arr_len, len(lst)):
            tmp_arr = lst
            if not array_diff(loop_arr, tmp_arr):
                find_index += 1
                break
            
            if i + len(tmp_arr) == len(lst):
                is_loop = False
      
    return loop_arr
   
print arr_proc()


新手挑战一下。。。

zltzlt 发表于 2020-1-24 13:03:11

Jetty 发表于 2020-1-23 23:14
新手挑战一下。。。

解答错误

输入:
输出:
预期结果:2

TJBEST 发表于 2020-1-24 14:06:19

本帖最后由 TJBEST 于 2020-1-24 14:51 编辑

事情真多,晚上再发吧

Croper 发表于 2020-1-24 16:40:54

阴阳神万物主 发表于 2020-1-23 22:15
唉~又增加了一个耗时间的环节。

优化后:

讲道理,这个解法不对吧,不用kmp我是没看出有什么好方法的

试试用例,预期结果应该是7,循环节。

Stubborn 发表于 2020-1-24 17:09:58

本帖最后由 Stubborn 于 2020-1-24 17:19 编辑

def func303(arr):
    k = ,]
    ki = 0
   
    idx = 0
    while True:
      for i in k:
            if idx >= len(arr):
                return len(k)
            if arr == i:
                idx += 1
            else:
                if ki:
                  k = k * ki
                  k.append(arr)
                  idx = len(k)
                  ki = 0
                  break
                else:
                  k.append(arr)
                  idx += 1
                  break
      ki += 1

TJBEST 发表于 2020-1-24 17:37:02

可能速度有些慢,楼主写的那个4003周期的东西 我速度2s左右 不过数对了也是不错的
def fun313(arr):
    def check():
      M = len(checkList)
      state = True
      div = N//M
      res = N%M
      for i in range(0,div):
            if arr[(i*M):((i+1)*M)]!= checkList:
                state = False
                break
      
      if state == False:
            return False
      else:
            if res == 0 or arr[(N-res):N]== checkList:
                return True
            else:
                return False
      
    N = len(arr)
    if N < 2:
      return N
    checkList = ]
   
    state = True
    for each inarr:
      if each!= arr:
            state = False
            break
    if state == True:
      return 1
   
    for each in arr:
      if each == arr:
            checkList.append(each)
      else:
            break
   
    M = len(checkList)
    for each in arr:
      if each != arr:
            checkList.append(each)
      else:
            if check():
                break
            else:
                checkList.append(each)
    return len(checkList)

TJBEST 发表于 2020-1-24 17:46:48

Croper 发表于 2020-1-24 16:43
结果:

你是正确的,我算的也是7

TJBEST 发表于 2020-1-24 22:36:44

楼主有时间测测我这个吧

zltzlt 发表于 2020-1-24 22:37:38

TJBEST 发表于 2020-1-24 22:36
楼主有时间测测我这个吧

抱歉,现在测不了,得等到明天

阴阳神万物主 发表于 2020-1-25 01:50:01

Croper 发表于 2020-1-24 16:40
讲道理,这个解法不对吧,不用kmp我是没看出有什么好方法的

试试用例,预期结果 ...

你是对的,但是好像测试数据里面没有这种的。

zltzlt 发表于 2020-1-25 10:22:03

Croper 发表于 2020-1-24 16:43
结果:

输入 会报错,帮你改了,最终用时 254 ms

zltzlt 发表于 2020-1-25 10:57:49

Stubborn 发表于 2020-1-24 17:09


输入大数据超时

zltzlt 发表于 2020-1-25 10:58:31

TJBEST 发表于 2020-1-24 17:37
可能速度有些慢,楼主写的那个4003周期的东西 我速度2s左右 不过数对了也是不错的

确实有点慢,不过勉强通过了,用时 3431 ms
页: 1 [2] 3
查看完整版本: Python:每日一题 313