鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

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

[复制链接]
发表于 2019-12-5 11:11:35 | 显示全部楼层
阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度

大O写法的话直接写成O(n^2)就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 12:06:31 | 显示全部楼层
danteer 发表于 2019-12-5 11:11
大O写法的话直接写成O(n^2)就行了

哦是这样啊,我这接触不深
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 12:29:53 From FishC Mobile | 显示全部楼层
danteer 发表于 2019-12-5 09:50
这函数是一次性的嘛

为什么这么说呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 14:29:40 | 显示全部楼层
hrp 发表于 2019-12-5 12:29
为什么这么说呢

我运行第一次能用,再运行第二次就报错了啊。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 14:39:50 | 显示全部楼层
danteer 发表于 2019-12-5 14:29
我运行第一次能用,再运行第二次就报错了啊。。。。。

我运行没问题,py3.8

能告诉我运行哪个列表报错了么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 15:06:58 | 显示全部楼层
  1. #每日一题文档,旨在练习Pyhon熟练度和提高算法

  2. def fun284(list_Num = [1,2,3],n = 10):
  3.     #n不能小于数组中元素位数最长的值
  4.     '''日期20191204
  5. 原文链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=151816&highlight=%C3%BF%C8%D5%D2%BB%CC%E2
  6. 今天的题目:
  7. 给出一组非负整数,重新排列它们的顺序,把它们组成一个最大的整数。

  8. 示例 1:
  9. 输入:[1, 20, 23, 4, 8]
  10. 输出:8423201

  11. 示例 2:
  12. 输入:[4, 6, 65]
  13. 输出:6654
  14. '''
  15. #该问题只要判断出每个元素的‘大小就可以’
  16. #比较方法是比较最左边的大小,如果相同切有下一位则比较下一位
  17. #该方法比较大小可以通过转换为同一次级10**n,如65和6则转换为65和60
  18.     def buquan(num,len_num = n):
  19.     #将所有整数通过末尾加 原来末尾的最后一位 转换为长度相同的整数
  20.         while num <10**n-1:
  21.             num  = num * 10 +num%10
  22.         return num

  23.     s = ''
  24.     list_Num.sort(key = buquan ,reverse = True)#将数字变为字符串降序
  25.     for i in  list_Num:
  26.         s += str(i)
  27.     return int(s)

  28.                                             
  29. print('输入为:[1,20,23,4,8]\t输出最大整数为:%d'             %(fun284(list_Num = [1,20,23,4,8])) )
  30. print('输入为:[4,6,65]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,65])) )
  31. print('输入为:[262,242,29,282,2822]\t输出最大整数为:%d'     %(fun284(list_Num = [262,242,29,282,2822])) )
  32. print('输入为:[650, 580, 66, 9, 661, 59]\t输出最大整数为:%d'%(fun284(list_Num = [650, 580, 66, 9, 661, 59])) )
  33. print('输入为:[2,221]\t输出最大整数为:%d'                   %(fun284(list_Num = [2,221])) )
  34. print('输入为:[4,6,67]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,67])) )
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 15:09:30 | 显示全部楼层
原文看起来好长,发个短的
  1. #每日一题文档,旨在练习Pyhon熟练度和提高算法

  2. def fun284(list_Num = [1,2,3],n = 10):
  3.     #n不能小于数组中元素位数最长的值
  4.     def buquan(num,len_num = n):
  5.     #将所有整数通过末尾加 原来末尾的最后一位 转换为长度相同的整数
  6.         while num <10**n-1:
  7.             num  = num * 10 +num%10
  8.         return num

  9.     s = ''
  10.     list_Num.sort(key = buquan ,reverse = True)#将数字变为字符串降序
  11.     for i in  list_Num:
  12.         s += str(i)
  13.     return int(s)

  14.                                             
  15. print('输入为:[1,20,23,4,8]\t输出最大整数为:%d'             %(fun284(list_Num = [1,20,23,4,8])) )
  16. print('输入为:[4,6,65]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,65])) )
  17. print('输入为:[262,242,29,282,2822]\t输出最大整数为:%d'     %(fun284(list_Num = [262,242,29,282,2822])) )
  18. print('输入为:[650, 580, 66, 9, 661, 59]\t输出最大整数为:%d'%(fun284(list_Num = [650, 580, 66, 9, 661, 59])) )
  19. print('输入为:[2,221]\t输出最大整数为:%d'                   %(fun284(list_Num = [2,221])) )
  20. print('输入为:[4,6,67]\t输出最大整数为:%d'                  %(fun284(list_Num = [4,6,67])) )

  21. >>>
  22. ==================== RESTART: C:\Users\13555\Desktop\1.py ====================
  23. 输入为:[1,20,23,4,8]        输出最大整数为:8423201
  24. 输入为:[4,6,65]        输出最大整数为:6654
  25. 输入为:[262,242,29,282,2822]        输出最大整数为:292822822262242
  26. 输入为:[650, 580, 66, 9, 661, 59]        输出最大整数为:66661650595809
  27. 输入为:[2,221]        输出最大整数为:2221
  28. 输入为:[4,6,67]        输出最大整数为:6764
  29. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 15:24:38 | 显示全部楼层
hrp 发表于 2019-12-5 14:39
我运行没问题,py3.8

能告诉我运行哪个列表报错了么

就像这样
12_5.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 15:41:50 | 显示全部楼层
本帖最后由 sn8625 于 2019-12-5 16:13 编辑
  1. '''
  2. 给出一组非负整数,重新排列它们的顺序,把它们组成一个最大的整数
  3. 输入:[1, 20, 23, 4, 8]
  4. 输出:8423201

  5. 输入:[4, 6, 65]
  6. 输出:6654
  7. '''
  8. def number():
  9.     l = [1, 20, 23, 4, 8]
  10.     nl = len(l)
  11.     lr = []
  12.     if nl == 1:
  13.         return l[0]

  14.     ln = [str(i) for i in l]
  15.     ln.sort(reverse=True)

  16.     for i in range(nl):
  17.         for j in range(nl):
  18.             lt = ln.copy()
  19.             s = lt.pop(i)
  20.             lt.insert(j,s)
  21.             lr.append(int(''.join(lt)))
  22.             # print(lr)
  23.     return max(lr)

  24. f = number()
  25. print(f)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 16:37:39 | 显示全部楼层
  1. from itertools import permutations

  2. def fun284(x):
  3.     list_x = []
  4.     for i in permutations(x):
  5.         list_x.append(int(''.join([str(j) for j in i])))
  6.     return max(list_x)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 16:46:05 | 显示全部楼层

我知道原因了,因为你的测试方法测试完没有退出程序,导致列表没清空,而我刚好复用list2了(其实不复用也会出现不可预知的结果),第二次测试就直接追加数据进去,就报错了。我吧list2 list3 result 都移到函数里面,每次运行都清空,就OK了,这是个小坑,多谢提醒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 18:21:45 | 显示全部楼层
  1. def fun(lst):
  2.     lst.sort(key = lambda x: str(x), reverse = True)
  3.     return int(''.join(map(str, lst)))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 20:06:37 | 显示全部楼层
以上例子均测试无误
  1. import itertools

  2. result = []
  3. compare_list = []
  4. int_list = [262,242,29,282,2822]
  5. str_list = []
  6. for member in int_list:
  7.     str_list.append(str(member))
  8. for member_list in itertools.permutations(str_list):
  9.     list1 = member_list[:]
  10.     for i in list1:
  11.         for j in i:
  12.             compare_list.append(str(j))
  13.     if result < compare_list:
  14.         result,compare_list = compare_list,result
  15.     compare_list = []
  16. for i in result:
  17.     for j in i:
  18.         print(j,end = '')
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 20:15:02 | 显示全部楼层
18463102026 发表于 2019-12-5 15:09
原文看起来好长,发个短的

这行结果不对啊
  1. 输入为:[650, 580, 66, 9, 661, 59]        输出最大整数为:66661650595809
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:46:32 | 显示全部楼层

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:47:18 | 显示全部楼层
本帖最后由 zltzlt 于 2019-12-5 21:02 编辑
阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度


解答错误

输入:[0,0]
输出:"00"
预期结果:0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:48:07 | 显示全部楼层
冬雪雪冬 发表于 2019-12-4 23:31
感谢楼上两位的提醒。再次修改:

恭喜通过!

执行用时:101 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:50:19 | 显示全部楼层

输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 超时(结果应是 9876543210)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:53:00 | 显示全部楼层

解答错误

输入:[3577,9155,9352,7911,1622]
输出:91559352791135771622
预期结果:93529155791135771622
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 20:54:31 | 显示全部楼层
danteer 发表于 2019-12-5 09:45
用了递归就没法解决稍微大一点的列表了。。。。。。

输入 [25,5,12,97,3,8,79,73,38,88,98,29,84,74,16,2,67,65,41,44,88,75,51,87,95,90,45,40,7,53,5,30,77,5,56,58,41,51,62,88,33,69,81,78,18,63,82,90,21,6,12,92,67,6,81,83,14,6,76,85,79,96,41,44,20,89,59,58,83,58,73,1,41,41,24,55,61,49,10,42,5,1,98,30,91,9,34,5,84,43,73,4,22,11,21,14,1,62,77,41] 超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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