鱼C论坛

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

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

[复制链接]
发表于 2019-11-2 08:13:12 | 显示全部楼层    本楼为最佳答案   
答题之前,先感谢一下抽时间出题、判题的版主,以及提供过题目的鱼友们
原来“不重叠”是指“两个切片的索引没有交集”
  1. from time import perf_counter  # 单位为秒

  2. def cal_time(func):
  3.     """ 懒人测时间 """
  4.     def inn(nums):
  5.         start = perf_counter()
  6.         res = func(nums)
  7.         stop = perf_counter()
  8.         print(f">>> result = {res}, run time: {(stop - start) * 1000}ms")
  9.     return inn

  10. @cal_time
  11. def f266(nums):
  12.     size = len(nums)
  13.     if size < 2:
  14.         return None  # 以防万一,就是不知道该返回 None 还是 False

  15.     minL = [0] * size
  16.     maxL = [0] * size
  17.     minL[0] = maxL[0] = nums[0]
  18.     for i in range(1, size):
  19.         minL[i] = min(minL[i-1] + nums[i], nums[i])  # minL[i] 存放 nums[:i+1] 的切片的最小值,其余三个同理
  20.         maxL[i] = max(maxL[i-1] + nums[i], nums[i])

  21.     minR = [0] * size
  22.     maxR = [0] * size
  23.     minR[-1] = maxR[-1] = nums[-1]
  24.     for i in range(size - 2, -1, -1):
  25.         minR[i] = min(minR[i+1] + nums[i], nums[i])
  26.         maxR[i] = max(maxR[i+1] + nums[i], nums[i])

  27.     res = float("-inf")
  28.     for i in range(size - 1):
  29.         res = max(res, abs(maxL[i] - minR[i + 1]), abs(minL[i] - maxR[i + 1]))
  30.     return res

  31. if __name__ == "__main__":
  32.     arr1 = [-2, 0, 0, 1, -1, -1]  # 3
  33.     arr2 = [-5, -4]  # 1
  34.     arr3 = [1, 2, -3, 1]  # 6

  35.     f266(arr3)
复制代码

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-11-2 08:15:06 | 显示全部楼层
华一仙 发表于 2019-11-2 08:13
答题之前,先感谢一下抽时间出题、判题的版主,以及提供过题目的鱼友们
原来“不重叠”是指“两个切片的索 ...

恭喜通过!

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

使用道具 举报

发表于 2019-11-2 11:37:23 | 显示全部楼层
20楼题目预订成没成功?楼主,给个信儿啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 12:21:01 | 显示全部楼层
阴阳神万物主 发表于 2019-11-2 11:37
我20楼题目预订成没成功?楼主,给个信儿啊。

因为此题不是原创的,所以不成功。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 12:42:44 | 显示全部楼层
zltzlt 发表于 2019-11-2 12:21
因为此题不是原创的,所以不成功。

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

使用道具 举报

发表于 2019-12-31 10:27:43 | 显示全部楼层
本帖最后由 kinkon 于 2019-12-31 10:47 编辑

只是为了完成作业,过程大概懂,速度应该算这个最优了
  1. def fun266(n):
  2.     max_pre = max_cur = float('-inf')
  3.     min_pre = min_cur = float('+inf')
  4.     for i in n:
  5.         max_cur = max(max_cur + i, i)        
  6.         max_pre = max(max_pre, max_cur)        
  7.         min_cur = min(min_cur + i, i)
  8.         min_pre = min(min_pre, min_cur)        
  9.     return max_pre - min_pre
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-31 10:55:30 | 显示全部楼层
kinkon 发表于 2019-12-31 10:27
只是为了完成作业,过程大概懂,速度应该算这个最优了

检查居然是错误的,晕倒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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