鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2019-11-7 20:30:30 | 显示全部楼层
阴阳神万物主 发表于 2019-11-7 20:25
这我就拿不准了……如果出现下面的情况:

咱是给出空表呢?还是给个 None 对象呢?

没有这样的数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-7 20:32:26 | 显示全部楼层

恭喜通过!

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

使用道具 举报

 楼主| 发表于 2019-11-7 20:33:07 | 显示全部楼层
阴阳神万物主 发表于 2019-11-7 20:18
如果,测试数据没有输入空表的,或者输入空表输出也是空表的话,如果我这个不超时,那么可能是目前行数最少 ...

恭喜通过!

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

使用道具 举报

发表于 2019-11-7 20:41:08 | 显示全部楼层
  1. def solve(A):
  2.     s = 1
  3.     for i in A:
  4.         s *= i
  5.     return list(map(lambda x:s//x, A))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 20:43:51 | 显示全部楼层
zltzlt 发表于 2019-11-7 20:30
没有这样的数据

嚯,那就好,楼主啊,下回出题可以考虑把绝对不出现的那种数据表示出来,就比如这回我提出来那个。
就这种有空可钻的,声明一下,不然想到了能纠结半天。
定死了,这里面只能装整数,但是我没装。这种的,不声明一下,不好办这个。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 20:52:49 | 显示全部楼层
之前确实没考虑0的情况
这里
  1. def solve(A):
  2.     s = 1
  3.     p = -1
  4.     for i in range(len(A)):
  5.         if A[i] == 0:
  6.             if p != -1:
  7.                 s = 0
  8.                 break
  9.             p = i
  10.             continue
  11.         s *= A[i]
  12.     def f(x):
  13.         if p == -1:
  14.             return s//x
  15.         elif s == 0:
  16.             return 0
  17.         else:
  18.             return s if A.index(x) == p else 0
  19.     return list(map(f, A))
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-11-7 20:59:18 | 显示全部楼层
Unicorn# 发表于 2019-11-7 20:52
之前确实没考虑0的情况
这里

恭喜通过!

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

使用道具 举报

发表于 2019-11-7 21:07:33 | 显示全部楼层
  1. from functools import reduce
  2. a = [2, 4, 6]
  3. b = [reduce(lambda x,y:x*y, j) for j in [[a[j] for j in range(len(a)) if j != i] for i in range(len(a))]]
  4. print(b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 21:29:25 | 显示全部楼层
阴阳神万物主 发表于 2019-11-7 20:18
如果,测试数据没有输入空表的,或者输入空表输出也是空表的话,如果我这个不超时,那么可能是目前行数最少 ...

你的算法是O(n^2),这个题是可以做到O(n)的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 21:57:17 | 显示全部楼层
写得有些长了,不如破斧子破摔,加几个空行,看上去还能清爽一点
  1. def f270(A):
  2.     if A == []:
  3.         return A

  4.     size = len(A)
  5.     timesL = [1] * size
  6.     timesR = [1] * size
  7.     res = [1] * size

  8.     tmp = 1
  9.     for i in range(size - 1):
  10.         tmp *= A[i]
  11.         timesL[i + 1] = tmp
  12.    
  13.     tmp = 1
  14.     for i in range(size - 1, 0, -1):
  15.         tmp *= A[i]
  16.         timesR[i - 1] = tmp
  17.    
  18.     for i in range(size):
  19.         res[i] = timesL[i] * timesR[i]
  20.     return res
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-11-8 00:18:24 | 显示全部楼层
  1. def fun270_0(input_list):
  2.     result = []
  3.     for i in range(len(input_list)):
  4.         temp = 1
  5.         for j in input_list[:i]+input_list[i+1:]:
  6.             if j == 0:
  7.                 temp = 0
  8.                 break
  9.             temp *= j
  10.         result.append(temp)
  11.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-11-8 10:32:20 | 显示全部楼层
学习中。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 12:05:10 | 显示全部楼层
danteer 发表于 2019-11-7 21:29
你的算法是O(n^2),这个题是可以做到O(n)的

好歹它过了……并且思路简单。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 12:27:27 | 显示全部楼层
danteer 发表于 2019-11-7 21:29
你的算法是O(n^2),这个题是可以做到O(n)的


的确可以做到,但要稍微动下脑子,几分钟就出来了,我之前那个,都没过脑子,就出来了:
  1. def solve_beta(A:'iterable'):
  2.     put = list(A)
  3.     le = len(put)
  4.     B = []
  5.     if put.count(0) > 1:#有好些个0
  6.         return [0]*le
  7.     elif put.count(0):#就只有一个0
  8.         B = [1]
  9.         for i in put:
  10.             if i:
  11.                 B[0] *= i
  12.         B *= le
  13.         for i in range(le):
  14.             if put[i]:
  15.                 B[i]=0
  16.     else:#没有0
  17.         mul = 1
  18.         for each in put:
  19.             mul *= each
  20.         B = [mul // no_mul for no_mul in put]
  21.     return B
  22.   
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 21:05:30 | 显示全部楼层
阴阳神万物主 发表于 2019-11-7 20:43
嚯,那就好,楼主啊,下回出题可以考虑把绝对不出现的那种数据表示出来,就比如这回我提出来那个。
就这 ...

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

使用道具 举报

 楼主| 发表于 2019-11-8 21:08:59 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-8 21:09:52 | 显示全部楼层
华一仙 发表于 2019-11-7 21:57
写得有些长了,不如破斧子破摔,加几个空行,看上去还能清爽一点

恭喜通过!

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

使用道具 举报

 楼主| 发表于 2019-11-8 21:10:35 | 显示全部楼层

恭喜通过!

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

使用道具 举报

发表于 2019-11-9 09:59:54 | 显示全部楼层
周末,调整了一下之前写的
  1. def f270(A):
  2.     size = len(A)
  3.     left, right = [1] * size, [1] * size
  4.     for i in range(1, size):
  5.         left[i] = left[i-1] * A[i-1]
  6.         right[size-1-i] = right[size-i] * A[size-i]
  7.     return [left[i]*right[i] for i in range(size)]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-9 11:21:36 | 显示全部楼层
本帖最后由 WXF666 于 2019-11-9 11:23 编辑

失败
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 08:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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