鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 313

[复制链接]
发表于 2020-1-25 18:24:40 | 显示全部楼层
  1. def solve_313(list1:list):
  2.     B, i,length,first = [list1[0]],1,0,0
  3.     while True:
  4.         if list1[i:i+length] == B:
  5.             i+=length         
  6.         elif i+length>=len(list1):
  7.             for a in range(i,len(list1)):
  8.                 if list1[a:] == B[:len(list1)-a]:
  9.                     first += 1
  10.                     break
  11.                 else:
  12.                     B = list1[:a+1]
  13.             if first == 0:
  14.                 return len(list1)
  15.             else:
  16.                 return len(B)
  17.         else:
  18.             B,length = list1[:i+1],len(B)
  19.             i += 1
  20. print(solve_313([1,2,3,4]+[1,2,3,4]*10000))
复制代码

楼主,我又来了,上次自闭了,这次换了方法,但是效率低,但是都是正确的,输入的数据,正是我这个算法的克星
输入【1,2,3,4,5】+【1,2,3,4】*10000,大约执行6S,麻烦楼主帮忙测试一下,感谢了!

评分

参与人数 1鱼币 +1 收起 理由
zltzlt + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 18:30:16 | 显示全部楼层
wanting-for 发表于 2020-1-25 18:24
楼主,我又来了,上次自闭了,这次换了方法,但是效率低,但是都是正确的,输入的数据,正是我这个算法的 ...

一开始就错了

输入:[1, 2, 1, 2, 1, 2]
输出:4
预期结果:2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-25 18:40:48 | 显示全部楼层
zltzlt 发表于 2020-1-25 18:30
一开始就错了

输入:[1, 2, 1, 2, 1, 2]
  1. def solve_313(list1:list):
  2.     B, i,length,first = [list1[0]],1,0,0
  3.     while True:
  4.         if list1[i:i+length] == B:
  5.             i+=length         
  6.         elif i+length>=len(list1):
  7.             for a in range(i,len(list1)):
  8.                 if list1[a:] == B[:len(list1)-a]:
  9.                     first += 1
  10.                     break
  11.                 else:
  12.                     B = list1[:a+1]
  13.             if first == len(list1)-i:
  14.                 return len(B)
  15.             elif first == 0:
  16.                 return len(list1)
  17.             else:
  18.                 return len(B)
  19.         else:
  20.             B = list1[:i+1]
  21.             length = len(B)
  22.             i += 1
  23. print(solve_313([1,2,1,2,1,2]))
  24. print('测试点1:',solve_313([1,2,1,2,1,2]))
  25. print('测试点2:',solve_313([1,2,1,2,1]))
  26. print('测试点3:',solve_313([1,2,1,2,1,4]))
  27. print('曾经错误的:',solve_313([1]))
  28. print('曾经错误的:',solve_313([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1]))
  29. print('曾经错误的:',solve_313([1, 1, 1, 3, 2, 1, 1, 1, 1, 3, 2, 1]))
  30. print('曾经错误的:',solve_313([1, 2, 3, 4, 5]+[1, 2, 3, 4]*10000))
复制代码

以后我再乱改代码,我先给自己两巴掌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 18:55:43 | 显示全部楼层
wanting-for 发表于 2020-1-25 18:40
以后我再乱改代码,我先给自己两巴掌

解答错误

输入:[1, 1, 1, 1]
输出:2
预期结果:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-25 19:00:48 | 显示全部楼层
zltzlt 发表于 2020-1-25 18:55
解答错误

输入:[1, 1, 1, 1]
  1. def solve_313(list1:list):
  2.     B, i,length,first = [list1[0]],1,1,0
  3.     while True:
  4.         if list1[i:i+length] == B:
  5.             i+=length         
  6.         elif i+length>=len(list1):
  7.             for a in range(i,len(list1)):
  8.                 if list1[a:] == B[:len(list1)-a]:
  9.                     first += 1
  10.                     break
  11.                 else:
  12.                     B = list1[:a+1]
  13.             if first == len(list1)-i:
  14.                 return len(B)
  15.             elif first == 0:
  16.                 return len(list1)
  17.             else:
  18.                 return len(B)
  19.         else:
  20.             B = list1[:i+1]
  21.             length = len(B)
  22.             i += 1
  23. print(solve_313([1,1,1,1]))
  24. print('测试点1:',solve_313([1,2,1,2,1,2]))
  25. print('测试点2:',solve_313([1,2,1,2,1]))
  26. print('测试点3:',solve_313([1,2,1,2,1,4]))
  27. print('曾经错误的:',solve_313([1]))
  28. print('曾经错误的:',solve_313([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 1]))
  29. print('曾经错误的:',solve_313([1, 1, 1, 3, 2, 1, 1, 1, 1, 3, 2, 1]))
  30. print('曾经错误的:',solve_313([1, 2, 3, 4, 5]+[1, 2, 3, 4]*10000))
  31. print(solve_313([1,2,1,2,3,1,2,1,2,1]))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 19:03:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-25 19:22:48 | 显示全部楼层

这个确实会有的,写的方法不怎么好,能通过就很高兴了,谢谢楼主不厌其烦的帮我测试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 19:23:38 | 显示全部楼层
wanting-for 发表于 2020-1-25 19:22
这个确实会有的,写的方法不怎么好,能通过就很高兴了,谢谢楼主不厌其烦的帮我测试!

不用谢新年快乐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-2 10:54:37 | 显示全部楼层
本帖最后由 776667 于 2021-4-2 10:57 编辑
  1. def fun313(x):
  2.     for i in range(1,len(x)):
  3.         if not len(x)%i:
  4.             if x == x[:i]*(len(x)//i):
  5.                 return len(x[:i])
  6.         else:
  7.             if x[:len(x)-(len(x)%i)] == x[:i]*(len(x)//i):
  8.                 if x[len(x)-(len(x)%i):] == x[:i][:len(x)%i]:
  9.                     return len(x[:i])
  10.     return len(x)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表