鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2020-1-12 21:07:51 | 显示全部楼层
nianyi 发表于 2020-1-12 21:05
a=list(input())
b=[]
for i in a:

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

使用道具 举报

发表于 2020-1-12 21:12:59 | 显示全部楼层
  1. x= input("请输入一组数字:")
  2. list1 = x.split(",")
  3. n= len(list1)
  4. count = 0
  5. for m in range(0, n):
  6.     for i in range(m+1, n):
  7.         if list1[m] > list1[i]:
  8.             count = count + 1
  9. print(count)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-1-12 21:15:16 | 显示全部楼层


说个数量级,也好改进自行测试下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-12 21:16:43 | 显示全部楼层
凌九霄 发表于 2020-1-12 21:15
说个数量级,也好改进自行测试下

输入长度超过 10000 的数组超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-12 21:23:43 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 21:41:58 | 显示全部楼层
本帖最后由 凌九霄 于 2020-1-12 21:46 编辑
zltzlt 发表于 2020-1-12 21:16
输入长度超过 10000 的数组超时

改了个版本,应该快很多了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-12 21:45:34 | 显示全部楼层
凌九霄 发表于 2020-1-12 21:41
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=153848&pid=4275578

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

使用道具 举报

发表于 2020-1-12 21:51:02 | 显示全部楼层
  1. def func304(l):
  2.     res = 0
  3.     while l:
  4.         s = l.index(max(l))
  5.         e = l.index(l[-1])
  6.         res += (e - s)
  7.         l.pop(s)
  8.     return res
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-1-12 21:53:20 | 显示全部楼层

解答错误

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

使用道具 举报

发表于 2020-1-12 21:55:41 | 显示全部楼层
zltzlt 发表于 2020-1-12 21:53
解答错误

输入:[4,4,2]

想错了,还有重复数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 21:59:50 | 显示全部楼层

看了下,10000的数量我测试不到3s,但100000跑了4分多,大部分时间耗在生成器上,如何能减少排序是关键
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 22:08:52 | 显示全部楼层

对于[2,4,1,1,5],要求不计算重复的逆序对,该怎么弄
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 22:20:53 | 显示全部楼层
fan1993423 发表于 2020-1-12 22:08
对于[2,4,1,1,5],要求不计算重复的逆序对,该怎么弄

不重复的逆序对?。。那你得先给个定义啊,什么叫做重复的,
。。比如[5,5,1,1,5,1,5,1]这种应该算有几个逆序对?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 23:00:40 | 显示全部楼层
Croper 发表于 2020-1-12 22:20
不重复的逆序对?。。那你得先给个定义啊,什么叫做重复的,
。。比如[5,5,1,1,5,1,5,1]这种应该算有几 ...

一对 就是(5,1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 23:24:59 | 显示全部楼层
本帖最后由 Croper 于 2020-1-12 23:28 编辑

  1. def func304(l:list):
  2.     l2=[]
  3.     map={}
  4.     for i in l:
  5.         exist=False
  6.         p,q=0,len(l2)
  7.         while (p<q):
  8.             n=(p+q)//2
  9.             if (i==l2[n]):
  10.                 exist=True
  11.                 map[i]=n
  12.                 break
  13.             if (l2[n]<i):
  14.                 q=n
  15.             else:
  16.                 p=n+1
  17.         if (not exist):
  18.             l2.insert(p,i)
  19.             map[i]=p
  20.     ret=0
  21.     for n in map.values():
  22.         ret+=n
  23.     return ret
复制代码

插入以第一个为准,计算以最后一个为准

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
fan1993423 + 3 + 3 + 3 厉害

查看全部评分

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

使用道具 举报

发表于 2020-1-12 23:37:21 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2020-1-13 00:24 编辑
zltzlt 发表于 2020-1-12 20:44
双重 for 循环,超时

看了看别人的出错数据,感觉这回稳
  1. def solve2(lst:'list of int')->int:
  2.     res = 0
  3.     temp = sorted(lst)
  4.     for each in lst:
  5.         if each in temp:
  6.             res += temp.index(each)
  7.             temp.remove(each)
  8.     return res
  9. if __name__ == '__main__':
  10.     print('示例1 输出:',solve2([2,4,1,3,5]))
  11.     print('示例2 输出:',solve2([1,2,3,4]))

复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-1-12 23:46:34 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2020-1-13 00:25 编辑


我这个也行点击查看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 23:55:22 | 显示全部楼层


输入[2,4,2],req设为False后结果是0对,预期结果是1对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 23:56:31 | 显示全部楼层
Croper 发表于 2020-1-12 23:55
输入[2,4,2],req设为False后结果是0对,预期结果是1对

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

使用道具 举报

发表于 2020-1-13 00:01:44 | 显示全部楼层
Croper 发表于 2020-1-12 23:55
输入[2,4,2],req设为False后结果是0对,预期结果是1对

这样还有不对的吗,我这小脑瓜还是太嫩了
  1. def solve2(lst:'list of int',rep=False)->int:
  2.     res = 0
  3.     temp = sorted(lst) if rep else sorted(set(lst))
  4.     for each in lst:
  5.         if each in temp[1:]:
  6.             res += temp.index(each)
  7.             temp.remove(each)
  8.     return res
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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