本帖最后由 阴阳神万物主 于 2020-1-23 22:20 编辑
zltzlt 发表于 2020-1-23 21:53
解答错误
输入:[1, 1, 1, 3, 2, 1, 1, 1, 1, 3, 2, 1]
唉~又增加了一个耗时间的环节。
- 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[i] != loop[i%l] or lst[i+1] != loop[(i+1)%l]:
- if lst[i] == loop[0]:
- a = loop[:]
- b = lst[l:i+l]
- d = (len(b)-len(a))//2
- a += b[:d]
- b = b[d:]
- #print('调试',a,b)
- if a == b:
- loop = a
- continue
- loop = lst[:i+1] if lst[i+1] == loop[0] else lst[:i+2]
- if debug:
- print('调试',loop)
- return len(loop)
- else:
- return 0
- if __name__ == '__main__':
- print('示例1 输出:',solve([1,2,1,2,1,2]))
- print('示例2 输出:',solve([1,2,1,2,1]))
- print('示例3 输出:',solve([1,2,1,2,1,4]))
- print('别人错的12#',solve([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1]))
- print('别人错的11#',solve([1]))
- print('之前错的23#',solve([1, 1, 1, 3, 2, 1, 1, 1, 1, 3, 2, 1]))
复制代码
优化后:
- def solve(lst:'list of int >= 0',debug=False)->list:
- if lst:
- loop = 1
- for i in range(1,len(lst)-1):
- if lst[i] != lst[i%loop] or lst[i+1] != lst[(i+1)%loop]:
- if lst[i] == lst[0]:
- r = loop+i
- l = r//2
- if lst[:l]==lst[l:r]:
- loop = l
- continue
- loop = i+1 if lst[i+1] == lst[0] else i+2
- if debug:
- print('调试',loop)
- return loop
- else:
- return 0
- if __name__ == '__main__':
- print('示例1 输出:',solve([1,2,1,2,1,2]))
- print('示例2 输出:',solve([1,2,1,2,1]))
- print('示例3 输出:',solve([1,2,1,2,1,4]))
- print('别人错的12#',solve([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1]))
- print('别人错的11#',solve([1]))
- print('之前错的23#',solve([1, 1, 1, 3, 2, 1, 1, 1, 1, 3, 2, 1]))
复制代码
|